最短路径Dijkstra模板

算法思想:把所有的边分成两个集合A,B。集合A表示已经求出最短路径的点,不断扩展集合A,减少集合B。每一扩展就从结合B中找出到源点距离最短的点,加入到A。

dis[i]数组代表从出发点到j的距离;

map[i][j]代表i到j的距离;

调用函数是需要把map初始化成正无穷;

int dis[N],map[N][N];
int vis[N];
int Dijkstra() { int i,j,k=0; for(i=1;i<=n;i++) dis[i]=map[0][i];//初始化dis数组中的值 for(i=1;i<=n;i++) { int maxx=INF;//INF代表这正无穷 for(j=1;j<=n;j++) if(!vis[j]&&dis[j]<maxx) { k=j; maxx=dis[j];//从此循环中找到dis中最小的值并记住地址,为以后更新做准备; } if(k==0) break; vis[k]=1; for(j=1;j<=n;j++) if(!vis[j]&&dis[j]>dis[k]+map[k][j]) dis[j]=dis[k]+map[k][j];//更新dis数组(保持dis中的数最小) } return dis[1]; }

  

原文地址:https://www.cnblogs.com/yuanbo123/p/5148208.html