比较简单的一道最短路,他要求所有的最短路中最小的,直接用floyed-warshall算法即可。
题意:有很多人传播谣言,给出每个人对其他人传播谣言的时间,求那个人传播给所有人后时间最短。
思路:简单的floyed-warshall算法,刚开始的时候初始化,出了点问题,初始化视情况而定。
#include<iostream>
#include<cstring>
#include<algorithm>
#include<climits>
#include<cstdio>
using namespace std;
int map[110][110];
int main()
{
freopen("in.txt","r",stdin);
int n;
while(cin>>n,n)
{
int m;
int peo,time;
int t=1;
//memset(p,-1,sizeof(p));
for(int i=1; i<=n; i++)
for(int j=0; j<=n; j++)
map[i][j]=100000;
// memset(map,INT_MAX,sizeof(map));
for(int i=1; i<=n; i++)
{
cin>>m;
for(int j=1; j<=m; j++)
{
cin>>peo>>time;
map[i][peo]=time;
}
}
int min1=INT_MAX;
for(int k=1; k<=n; k++)
for(int i=1; i<=n; i++)
{
for(int j=1; j<=n; j++)
{
map[i][j]=min(map[i][j],map[i][k]+map[k][j]);
}
}
min1=INT_MAX;
int flag=0;
int w;
for(int i=1; i<=n; i++)
{
int max1=-1000000;
for(int j=1; j<=n; j++)
{
if(i!=j&&map[i][j]>max1)
{
max1=map[i][j];
}
}
if(min1>max1)
{
min1=max1;
w=i;
}
}
cout<<w<<' '<<min1<<endl;
}
return 0;
}