最短路径模板
代码模板 具体例题代码链接
1 void floyd() 2 { 3 for(int k=1;k<=n;k++)//中间点 4 { 5 for(int i=1;i<=n;i++) 6 { 7 for(int j=1;j<=n;j++) 8 { 9 pri[i][j]=min(pri[i][j],pri[i][k]+pri[k][j]);//取当前最短距离和含有中间顶点的距离的最小值 10 } 11 } 12 } 13 }
14 void dijkstra() 15 { 16 memset(vis,0,sizeof(vis)); 17 vis[1]=1; 18 for(int i=2;i<=n;i++) 19 dis[i]=pri[1][i]; 20 for(int i=0;i<n;i++) 21 { 22 int M=INF,k=-1; 23 //每次找出最小的距离加入到集合 24 for(int j=1;j<=n;j++) 25 { 26 if(!vis[j]&&dis[j]<M) 27 M=dis[j],k=j; 28 } 29 if(k==-1) 30 return ; 31 vis[k]=1;//加入集合 32 //新加入一个顶点,更新到达各个顶点的距离 33 for(int j=1;j<=n;j++) 34 if(!vis[j]&&dis[j]>dis[k]+pri[k][j]) 35 dis[j]=dis[k]+pri[k][j]; 36 }
——将来的你会感谢现在努力的自己。