最短路径C++算法模板

最短路径C++算法模板

看了算法笔记,记录Dijkstra算法模板,Dijkstra算法是单源最短路径算法


#define maxv 1001
#define INF 0x3fffffff
int G[maxv][maxv];//邻接矩阵存储顶点
int d[maxv], n;//n 是顶点数 
bool vis[maxv] = {false};

void dijkstra(int s){//对点s进行最短路径算法 
    fill(d, d + maxv, INF);
    d[s] = 0;
    for(int i = 0;i < n;i++){//对每个顶点进行遍历
        int u = -1, Min = INF;
        
        for(int j = 0;j < n;j++){//找到距离s最近的未访问过的顶点u
            if(!vis[j] && d[j] < Min){
                Min = d[j];
                u = j;
            }
        }
        
        if(u == -1) return;//图是不连通的 
        vis[u] = true;//访问顶点u
        for(int v = 0;v < n;v++) {
            if(!vis[v] && G[u][v] != INF && d[u] + G[u][v] < d[v]){//如果s通过中间顶点u到v的距离比原来s到u的距离更短则更新该距离
                d[v] = d[u] + G[u][v];
            }
        }
    }
    
}

猜你喜欢

转载自www.cnblogs.com/Codroc/p/12458770.html