算法思想:把所有的边分成两个集合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]dis[k]+map[k][j]) dis[j]=dis[k]+map[k][j];//更新dis数组(保持dis中的数最小) } return dis[1];}