最短路径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);//初始化所有顶点到源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];
			}
		}
	}
	
}
原文地址:https://www.cnblogs.com/Codroc/p/12458770.html