Dijkstra基本思路(感觉和Prim非常类似)
起点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 }
![字节跳动内推](https://img2020.cnblogs.com/blog/323808/202004/323808-20200415172728571-1992447742.jpg)
找我内推: 字节跳动各种岗位
作者:
ZH奶酪(张贺)
邮箱:
cheesezh@qq.com
出处:
http://www.cnblogs.com/CheeseZH/
*
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。