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

 

你可能感兴趣的:(route)