休息了几天,开始了我的图论之路。这道简单的Floyed算法做起来还比较简单。hellobabygogo!!!
题意:
从任意一点出发传出信息使所有的点都能接收到信息所需的最少时间。Floyed可以算出所有点之间的最短距离,所以选折Floyed算法。
代码:
#include<iostream>
using namespace std;
const int MAX=110;
int dis[MAX][MAX];
int main()
{
int i,j,k,p,q,m,n,max,min,locate;
while(cin>>n,n)
{
for(i=0;i<=n;i++)
for(j=0;j<=n;j++)
dis[i][j]=100000;
for(i=1;i<=n;i++)
{
cin>>m;
for(j=1;j<=m;j++)
{
cin>>p>>q;
dis[i][p]=q;
}
}
for(k=1;k<=n;k++)
for(i=1;i<=n;i++)
for(j=1;j<=n;j++)
{
if(dis[i][j]>dis[i][k]+dis[k][j])
dis[i][j]=dis[i][k]+dis[k][j];
}
min=100000;
for(i=1;i<=n;i++)
{
max=0;
for(j=1;j<=n;j++)
{
if(i!=j&&dis[i][j]>max)
max=dis[i][j];
}
if(max<min)
{
locate=i;
min=max;
}
}
if(min<100000)
{
cout<<locate<<' '<<min<<endl;
}
else cout<<"disjoint"<<endl;
}
return 0;
}