您的位置:首页 > 其它

POJ 1125 Stockbroker Grapevine

2013-10-03 22:15 375 查看
多源最短路径(Floyd暴力求解~)

#include <iostream>
#include <cstdio>

using namespace std;

const int maxn = 9;
const int maxint = 1000000000;

int f[maxn][maxn], n;

void floyd()
{
for( int k = 1; k <= n; k++ )
for( int i = 1; i <= n; i++ )
for( int j = 1; j <= n; j++ )
if( f[i][j] > f[i][k] + f[k][j] )
f[i][j] = f[i][k] + f[k][j];
}

int main()
{
while( ~scanf( "%d", &n ), n )
{
int t, y, temp;
if( n == 1 )
{
printf( "1 0\n" );
continue;
}
for( int i = 0; i < maxn; i++ )
for( int j = 0; j < maxn; j++ )
f[i][j] = maxint;
for( int i = 1; i <= n; i++ )
{
scanf( "%d", &t );
for( int j = 1; j <= t; j++ )
{
scanf( "%d%d", &y, &temp );
f[i][y] = temp;
}
}

floyd();

int tm = maxint;
int mx, per;
for( int i = 1; i <= n; i++ )
{
mx = 0;
for( int j = 1; j <= n; j++ )
if( i != j )
mx = mx < f[i][j] ? f[i][j] : mx;
if( tm > mx )
{
tm = mx;
per = i;
}
}
if( tm != maxint)
printf( "%d %d\n", per, tm );
else
printf( "disjoint\n" );
}
return 0;
}


 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  acm poj 最短路径