您的位置:首页 > 其它

poj 1125 Stockbroker Grapevine

2012-10-16 20:53 441 查看
题意:给出一个有N个点的图,求每一个点到其他各点最长距离中的最小值。

思路:读懂了题意,这题就是一个水到不能再水的题。就是一个flody,然后求出任意两点的最小距离。然后一个二重循环就行了。

代码:

View Code

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <iostream>
#include <algorithm>
#include <queue>
#include <math.h>
#define  N 105
#define  INF 100000000
using namespace std ;

int map

;
int n ;

int main()
{
int i , j , k , x , y , t ;

while ( scanf ( "%d" , &n ) , n )
{
for ( i = 1 ; i <= n ; i++ )
for ( j = 1 ; j <= n ; j++ )
map[i][j] = INF ;

for ( i = 1 ; i <= n ; i++ )
{
scanf ( "%d" , &t );
while ( t-- )
{
scanf ( "%d%d" , &x , &y );
map[i][x] = y ;
}
}

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] )
map[i][j] = map[i][k] + map[k][j] ;

/*for ( i = 1 ; i <= n ; i++ )
for ( j = 1 ; j <= n ; j++ )
printf ( "%d %d = %d\n" , i , j , map[i][j] );*/

int ans = INF ;
int minx , pos ;
for ( i = 1 ; i <= n ; i++ )
{
minx = -1 ;
for ( j = 1 ; j <= n ; j++ )
if ( i != j && map[i][j] > minx )
minx = map[i][j] ;
if ( minx < ans )
{
ans = minx ;
pos = i ;
}
}

if ( ans == INF )
printf ( "disjoint\n" );
else
printf ( "%d %d\n" , pos , ans ) ;
}
return 0 ;
}


再次痛恨自己的英语水平,什么时候能够顺利的读下来题啊。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: