起点v;
vis[]数组表示某个点是否被访问过;初始全为0;
cls[]数组表示当前集合到其余集合最近的距离;初始全为max;
map[][]数组表示图的邻接矩阵;对角线为0;
===================================
1 void Dijkstra(int v) 2 { 3 int i,j,min,nxt; 4 5 for(i=1;i<=n;i++) cls[i]=map[v][i];//先用v到邻接点的距离初始化cls 6 memset(vis,0,sizeof(vis));//访问标志全部置0 7 vis[v]=1;//起点访问标志置1 8 9 for (i=1;i<n;i++) 10 { 11 min=MAX; 12 nxt=v; 13 //找出离集合最近的那个点nxt,以及该点到集合的距离min; 14 for (j=1;j<=n;j++) 15 { 16 if(!vis[j]&&cls[j]<min) 17 { 18 nxt=j; 19 min=cls[j]; 20 } 21 } 22 vis[nxt]=1; 23 //更新cls数组 24 for (j=1;j<=n;j++) 25 {//j点没有被访问过,j点和nxt点之间有通路,nxt点到j点的距离+集合到nxt的距离<集合到j的距离 26 if(!vis[j]&&map[nxt][j]<MAX&&(cls[nxt]+map[nxt][j])<cls[j]) 27 cls[j]=cls[nxt]+map[nxt][j]; 28 } 29 } 30 }
本文转自ZH奶酪博客园博客,原文链接:http://www.cnblogs.com/CheeseZH/archive/2012/05/26/2519429.html,如需转载请自行联系原作者