poj 1125 (floyd)

#include<stdio.h>
#define N 200
#define max 999999
int map[N][N],d[N];
int n,ans,f;
void init()
{
    int i,j;
    for(i=0;i<=n;i++)
    {
        d[i]=-max;
        for(j=0;j<=n;j++)
          map[i][j]=max;
    }
    f=0;ans=max;
}
void  floyd()
{
    int i,j,k;

    for( i=1;i<=n;i++)
    {
        for(j=1;j<=n;j++)
        {
            for(k=1;k<=n;k++)
            {
                int t=map[j][i]+map[i][k];
                if(map[j][k]>t)
                map[j][k]=t;
            }
        }
    }

    for(i=1;i<=n;i++)
    {
        for(j=1;j<=n;j++)
        {

            if(d[i]<map[i][j]&&i!=j)
            {
                d[i]=map[i][j];

            }
        }
    }
}
int main()
{
    int l,num,a,b,i,j;
    while(scanf("%d",&n),n)
    {
        init();
        for(l=1;l<=n;l++)
        {
            scanf("%d",&num);
            while(num--)
            {
                scanf("%d%d",&a,&b);
                map[l][a]=b;
            }
        }
        floyd();
        for(i=1;i<=n;i++)
        {
            for(j=1;j<=n;j++)
            {
                if(map[i][j]==max&&map[j][i]==max)
                {

                }
                else  break;
            }
            if(j==n){f=0;break;}
        }

        /*for(i=1;i<=n;i++)
        {
            for(int j=1;j<=n;j++)
            {
                printf("%d ",map[i][j]);
            }
            printf("\n");
        }*/
        for(i=1;i<=n;i++)
        {
            if(ans>d[i])
            {
                ans=d[i];
                f=i;
            }
        }
        if(!f)printf("disjoint\n");
        else
        {
            printf("%d %d\n",f,ans);
        }


    }
}

  

原文地址:https://www.cnblogs.com/acSzz/p/2376091.html