Stockbroker Grapevine (poj1125)Floyd-Warshall
#include <iostream>
using namespace std;
#define INF 1000000
const int MAX=100;
int dis[MAX+10][MAX+10]; //存放最短路
int n; //人数
int loc;
void Floyd()
{
for (int k=1;k<=n;k++)
{
for (int i=1;i<=n;i++)
{
for (int j=1;j<=n;j++)
{
if (dis[i][j]>dis[i][k]+dis[k][j])
{
dis[i][j]=dis[i][k]+dis[k][j];
}
}
}
}
}
void Min()
{
int i,j;
int max,min=INF;
for (i=1;i<=n;i++)
{
max=0; //从i开始的最长路
for (j=1;j<=n;j++)
{
if (i!=j && dis[i][j]>max)
{
max=dis[i][j];
}
}
if (max<min) //最长中求最短
{
loc=i;
min=max;
}
}
(min<100000) ? printf("%d %d\n",loc,min) : printf("disjoint\n");
}
int main()
{
//freopen("in.txt","r",stdin);
int i,j,k,p,q;
while (scanf("%d",&n) && n)
{
/*用Floyd之前先要初始化*/
for (i=1;i<=n;i++)
{
for (j=1;j<=n;j++)
{
dis[i][j]=INF;
}
}
/*输入数据*/
for (i=1;i<=n;i++)
{
scanf("%d",&k);
for (j=1;j<=k;j++)
{
scanf("%d%d",&p,&q);
dis[i][p]=q;
}
}
Floyd();
Min();
}
return 0;
}

浙公网安备 33010602011771号