现在的位置: 首页 > 综合 > 正文

POJ 1125 floyd水题

2012年09月02日 ⁄ 综合 ⁄ 共 714字 ⁄ 字号 评论关闭

虽说是水题,但是也太坑爹了吧~~~ 以前的floyd都是用的k作为内重循环,在这个题就是错了,不知道为啥,总之就是错了。调试了n久啊~ 有木有~~

#include<iostream>
#define MAXN 111
#define INF 1<<30-1
using namespace std;


int map[MAXN][MAXN];
int n,m;

int main()
{
    while( scanf( "%d",&n )!=EOF )
    {
           if( n==0 )
               break;
           int i,j,k,v;
           for( i=0;i<=n;i++ )
                for( j=0;j<=n;j++ )
                {
                     map[i][j]=INF;
                }
                     
           for( i=1;i<=n;i++ )
           {
                scanf( "%d",&m );
                for( j=1;j<=m;j++ )
                {
                     scanf( "%d %d",&k,&v );
                     map[i][k]=v;
                }
           }
           for( k=1;k<=n;k++ )
                for( i=1;i<=n;i++ )
                     for( j=1;j<=n;j++ )
                          if( map[i][j]>map[i][k]+map[k][j] && i!=j )
                              map[i][j]=map[i][k]+map[k][j];
                              
           int ansIndex=-1;
           int ans=INF;
           int maxn=0;          
           for( i=1;i<=n;i++ )
           {
                maxn=0;
                    for( j=1;j<=n;j++ )
                         if( maxn<map[i][j] && i!=j )
                             maxn=map[i][j];
                    if( ans>maxn )
                    {
                        ansIndex=i;
                        ans=maxn;
                    }
           }
           if( ansIndex!=-1)
               printf( "%d %d\n",ansIndex,ans );
           else
               printf( "disjoint\n" );
    }
    return 0;
}

抱歉!评论已关闭.