首页 > 代码库 > hdu 1599 find the mincost route

hdu 1599 find the mincost route

http://acm.hdu.edu.cn/showproblem.php?pid=1599

floyd找最小环。

 1 #include <cstdio>
 2 #include <cstring>
 3 #include <algorithm>
 4 #define maxn 200
 5 using namespace std;
 6 const int inf=1<<28;
 7 
 8 int g[maxn][maxn],dis[maxn][maxn];
 9 int n,m,a,b,c;
10 
11 int main()
12 {
13     while(scanf("%d%d",&n,&m)!=EOF)
14     {
15         for(int i=1; i<=n; i++)
16         {
17             for(int j=1; j<=n; j++)
18             {
19                     g[i][j]=inf;
20             }
21         }
22         for(int i=0; i<m; i++)
23         {
24             scanf("%d%d%d",&a,&b,&c);
25             g[a][b]=g[b][a]=min(g[a][b],c);
26         }
27         for(int i=1; i<=n; i++)
28         {
29             for(int j=1; j<=n; j++)
30             {
31                 dis[i][j]=g[i][j];
32             }
33         }
34         int min1=inf;
35         for(int k=1; k<=n; k++)
36         {
37             for(int i=1; i<k; i++)
38             {
39                 for(int j=1; j<i; j++)
40                 {
41                     min1=min(min1,dis[i][j]+g[i][k]+g[k][j]);
42                 }
43             }
44             for(int i=1; i<=n; i++)
45             {
46                 for(int j=1; j<=n; j++)
47                 {
48                     dis[i][j]=min(dis[i][j],dis[i][k]+dis[k][j]);
49                 }
50             }
51         }
52         if(min1==inf)
53             printf("It‘s impossible.\n");
54         else
55             printf("%d\n",min1);
56     }
57     return 0;
58 }
View Code