Code Render Status : Rendered By HDOJ C++ Code Render Version 0.01 Beta
1 /*Dijstra*/ 2 #include <iostream> 3 #include <cstring> 4 #include <cstdlib> 5 using namespace std; 6 #define MAX 0x3f3f3f3f 7 #define max 202 8 int map[max][max],visited[max]; 9 10 int main() 11 { 12 int n,m,i,j,a,b,d; 13 while(cin>>n>>m) 14 { 15 memset(map,MAX,sizeof(map)); 16 for(i=0;i<n;i++) 17 { 18 visited[i]=0;//访问标志位 19 map[i][i]=0;//注意 20 } 21 while(m--) 22 { 23 cin>>a>>b>>d; 24 if(map[a][b]>d) map[a][b]=map[b][a]=d; /*注意可能会有多条路*/ 25 } 26 cin>>a>>b;//s 和 t 27 int min,u; 28 visited[a]=1; 29 for(i=0;i<n;i++) 30 { 31 min=MAX; 32 for(j=0;j<n;j++) 33 { 34 if(!visited[j]&&min>map[a][j])//j没有被访问,且和a之间的距离最短,记录为u 35 { 36 min=map[a][j];//min为a到j的距离 37 u=j; 38 } 39 } 40 visited[u]=1;//u被访问了 41 for(j=0;j<n;j++)//更新a的邻接点 42 { 43 if(!visited[j]&&min+map[u][j]<map[a][j])//j没有被访问,并且min+map[u][j]<map[a][j] 44 map[a][j]=min+map[u][j]; 45 } 46 } 47 if(map[a][b]<MAX) cout<<map[a][b]<<endl; 48 else cout<<"-1"<<endl; 49 } 50 return 0; 51 }
本文转自ZH奶酪博客园博客,原文链接:http://www.cnblogs.com/CheeseZH/archive/2012/05/24/2517226.html,如需转载请自行联系原作者