简单的Floyd算法的应用。
#include <iostream>
#include <stdlib.h>
using namespace std;
int n;
int D[101][101];
void floyd(){
for(int k=1;k<=n;++k)
for(int i=1;i<=n;++i)
for(int j=1;j<=n;++j)
D[i][j] = min(D[i][j],D[i][k]+D[k][j]);
int res = 1000;
int no = 1;
for(int i=1;i<=n;++i){
int t = D[i][1];
for(int j=1;j<=n;++j){
if(D[i][j]>t)
t = D[i][j];
}
if(t<res){
no = i;
res = t;
}
}
if(res<1000)
cout<<no<<" "<<res<<endl;
else
cout<<"disjoint"<<endl;
}
int main(){
while(cin>>n,n!=0){
for(int i=1;i<=n;++i){
int t;
cin>>t;
for(int j=1;j<=n;++j)
D[i][j] = 1000;
D[i][i] = 0;
for(int k=0;k<t;++k){
int j,w;
cin>>j>>w;
D[i][j] = w;
}
}
floyd();
}
return 0;
}