poj1125
简单floyd算法应用,适合刚学floyd练手(比如我)
#include <stdio.h>
#include <string.h>
#define INF (1<<20)
#define NUM 101
#define MIN(a,b) ((a)<(b)?(a):(b))
#define MAX(a,b) ((a)>(b)?(a):(b))
int num;
int map[NUM][NUM];
int min,last,minnum;
void floyd()
{
for(int k=1;k<=num;++k)
for(int i=1;i<=num;++i)
for(int j=1;j<=num;++j)
map[i][j]=MIN(map[i][k]+map[k][j],map[i][j]);
}
int main()
{
while(scanf("%d",&num),num)
{
for(int i=1;i<=num;++i)
for(int j=1;j<=num;++j)
map[i][j]=(i==j?0:INF);
for(int i=1,n;i<=num;++i)
{
scanf("%d",&n);
for(int j=1,a,b;j<=n;++j)
{
scanf("%d %d",&a,&b);
map[i][a]=b;
}
}
floyd();
min=INF;
for(int i=1;i<=num;++i)
{
last=0;
for(int j=1;j<=num;++j)
last=MAX(last,map[i][j]);
if(min>last)
{
minnum=i;
min=last;
}
}
if(min!=INF) printf("%d %d\n",minnum,min);
else printf("disjoint\n");
}
return 0;
}
浙公网安备 33010602011771号