HDOJ 1874(Floyd求两点间的最短路问题模板题)

时间复杂度O(v^3),可以处理负边。

 1 #include <iostream>
 2 #include <cstdio>
 3 #include <cmath>
 4 #include <cstring>
 5 #include <algorithm>
 6 #include <queue>
 7 #include <stack>
 8 #include <vector>
 9 using namespace std;
10 int d[250][250];
11 int main(int argc, char *argv[])
12 {
13     int n,m;
14     while(scanf("%d%d",&n,&m)!=EOF)
15     {
16         for(int i=0;i<=n;i++)
17             for(int j=0;j<=n;j++)
18             {
19                 if(i==j)
20                 d[i][j]=0;
21                 else
22                 d[i][j]=1e9;
23             }
24         for(int i=0;i<m;i++)
25         {
26             int x,y,z;
27             scanf("%d%d%d",&x,&y,&z);
28             d[x][y]=min(d[x][y],z);
29             d[y][x]=min(d[y][x],z);
30         }
31         int s,t;
32         scanf("%d%d",&s,&t);
33         for(int k=0;k<n;k++)
34             for(int i=0;i<n;i++)
35                 for(int j=0;j<n;j++)
36                     d[i][j]=min(d[i][j],d[i][k]+d[k][j]);
37         if(d[s][t]==1e9)
38         printf("-1");
39         else
40         printf("%d",d[s][t]);
41         printf("\n");
42     } 
43     return 0;
44 }

 

posted @ 2018-09-29 15:26  huluxin  阅读(197)  评论(0编辑  收藏  举报