hdu 1599 (floyd求无向图最小环)






#include<stdio.h>
#include<string.h>
//#define inf 0x3fffffff//这个就wrong了
#define inf 99999999
int map[110][110],dis[110][110];
int main()
{
    int n,m,i,j,w,x,y,min,k;
    while(scanf("%d%d",&n,&m)!=-1)
    {
        for(i=1;i<=n;i++)
        {
            for(j=i+1;j<=n;j++)
            {
                map[i][j]=map[j][i]=inf;
                dis[i][j]=dis[j][i]=inf;
            }
            map[i][i]=0;
            dis[i][i]=0;
        }
        for(i=0;i<m;i++)
        {
            scanf("%d%d%d",&x,&y,&w);
            if(map[x][y]>w)
            {
                map[x][y]=map[y][x]=w;
                dis[x][y]=dis[y][x]=w;
            }
        }
        min=inf;
        for(k=1;k<=n;k++)
        {
            for(i=1;i<k;i++)
                for(j=i+1;j<k;j++)
                {
                    if(min>dis[i][j]+map[i][k]+map[k][j])
                        min=dis[i][j]+map[i][k]+map[k][j];
                }
                for(i=1;i<=n;i++)
                    for(j=1;j<=n;j++)
                        if(dis[i][j]>dis[i][k]+dis[k][j])
                            dis[i][j]=dis[i][k]+dis[k][j];
        }
        if(min<inf)printf("%d\n",min);
        else printf("It's impossible.\n");
    }
    return 0;
}
        


你可能感兴趣的:(编程,算法,百度,Google,ACM)