首页 > 代码库 > HDU 1599

HDU 1599

裸的FLOYD 求最小环。

 1 #include <iostream> 2 #include <cstdio> 3 using namespace std; 4 const int inf=100000000; 5 const int MAXN=105; 6 int n,m,minc; 7 int map[MAXN][MAXN],dis[MAXN][MAXN]; 8  9 void init(){10     for(int i=1;i<=n;i++){11         for(int j=i;j<=n;j++)12         map[i][j]=map[j][i]=dis[i][j]=dis[j][i]=inf;13         map[i][i]=dis[i][i]=0;14     }15 }16 17 void floyd(){18     minc=inf;19     int tmp;20     for(int k=1;k<=n;k++){21         for(int i=1;i<k;i++){22             for(int j=i+1;j<k;j++){23                 tmp=dis[i][j]+map[i][k]+map[k][j];24                 if(tmp<minc)25                 minc=tmp;26             }27         }28         for(int i=1;i<=n;i++){29             for(int j=1;j<=n;j++){30                 tmp=dis[i][k]+dis[k][j];31                 if(tmp<dis[i][j])32                 dis[i][j]=tmp;33             }34         }35     }36 }37 38 39 int main(){40     int u,v,w;41     while(scanf("%d%d",&n,&m)!=EOF){42         init();43         for(int i=1;i<=m;i++){44             scanf("%d%d%d",&u,&v,&w);45             if(w<map[u][v])46             map[u][v]=map[v][u]=dis[u][v]=dis[v][u]=w;47         }48         floyd();49         if(minc==inf)50         printf("It‘s impossible.\n");51         else printf("%d\n",minc);52     }53     return 0;54 }
View Code