View Code
1 #include<iostream>
2 using namespace std;
3 #define MAX 0xfffffff
4 #define max 205
5 int map[max][max],sign[max];
6
7 int main()
8 {
9 int n,m,i,j,a,b,d;
10 while(cin>>n>>m)
11 {
12 for(i= 0;i<n;i++)
13 {
14 sign[i]= 0;
15 for(j= 0;j<n;j++)
16 {
17 if(i==j) map[i][j]= 0; // 注意
18 else map[i][j]=MAX;
19 }
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;
27 int min,u;
28 sign[a]= 1;
29 for(i= 0;i<n;i++)
30 {
31 min=MAX;
32 for(j= 0;j<n;j++)
33 if(!sign[j]&&min>map[a][j])
34 {
35 min=map[a][j];
36 u=j;
37 }
38 sign[u]= 1;
39 for(j= 0;j<n;j++)
40 if(!sign[j]&&min+map[u][j]<map[a][j])
41 map[a][j]=min+map[u][j];
42 }
43 if(map[a][b]<MAX) cout<<map[a][b]<<endl;
44 else cout<< " -1 "<<endl;
45 }
46 return 0;
47 }
2 using namespace std;
3 #define MAX 0xfffffff
4 #define max 205
5 int map[max][max],sign[max];
6
7 int main()
8 {
9 int n,m,i,j,a,b,d;
10 while(cin>>n>>m)
11 {
12 for(i= 0;i<n;i++)
13 {
14 sign[i]= 0;
15 for(j= 0;j<n;j++)
16 {
17 if(i==j) map[i][j]= 0; // 注意
18 else map[i][j]=MAX;
19 }
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;
27 int min,u;
28 sign[a]= 1;
29 for(i= 0;i<n;i++)
30 {
31 min=MAX;
32 for(j= 0;j<n;j++)
33 if(!sign[j]&&min>map[a][j])
34 {
35 min=map[a][j];
36 u=j;
37 }
38 sign[u]= 1;
39 for(j= 0;j<n;j++)
40 if(!sign[j]&&min+map[u][j]<map[a][j])
41 map[a][j]=min+map[u][j];
42 }
43 if(map[a][b]<MAX) cout<<map[a][b]<<endl;
44 else cout<< " -1 "<<endl;
45 }
46 return 0;
47 }