最短路径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);//初始化所有顶点到源s的距离为无穷大
d[s] = 0;//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到v的距离更短则更新该距离
d[v] = d[u] + G[u][v];
}
}
}
}