最短路径模板

代码模板        具体例题代码链接

 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 }

 

posted @ 2016-08-04 14:58  野小子&  阅读(295)  评论(0编辑  收藏  举报