HDU1599 最小环

floyd新应用!!!!

View Code
 1 #include<stdio.h>
 2 const int maxn = 101;
 3 const int inf = 9999999;
 4 int n,m;
 5 int dis[ maxn ][ maxn ],mat[ maxn ][ maxn ];
 6 
 7 void floyd(){
 8     int ans=inf;
 9     for( int i=1;i<=n;i++ )
10         for( int j=1;j<=n;j++ )
11             dis[ i ][ j ]=mat[ i ][ j ];
12     for( int k=1;k<=n;k++ ){
13 
14         for( int i=1;i<k;i++ ){
15             for( int j=1;j<i;j++ ){
16                 if( ans>( dis[i][j]+mat[i][k]+mat[k][j] ) )
17                     ans=dis[i][j]+mat[i][k]+mat[k][j];
18             }
19         }
20 
21         for( int i=1;i<=n;i++ ){
22             for( int j=1;j<=n;j++ ){
23                 if( dis[i][k]!=inf && dis[k][j]!=inf && dis[i][j]>(dis[i][k]+dis[k][j]) )
24                     dis[i][j]=(dis[i][k]+dis[k][j]);
25             }
26         }
27 
28     }
29 
30      if(ans==inf)
31          printf("It's impossible.\n");
32      else 
33          printf("%d\n",ans); 
34 }
35 
36 int main(){
37     while( scanf("%d%d",&n,&m)==2 ){
38         for( int i=1;i<=n;i++ )
39             for( int j=1;j<=n;j++ )
40                 mat[ i ][j ]=inf;
41         int a,b,c;
42         while( m-- ){
43             scanf("%d%d%d",&a,&b,&c);
44             if( c<mat[ a ][ b ] )
45                 mat[ a ][ b ]=mat[ b ][ a ]=c;
46         }
47         floyd();
48     }
49     return 0;
50 }            
keep moving...
原文地址:https://www.cnblogs.com/xxx0624/p/2890540.html