Stockbrokers要散布一个股票的谣言,谣言只能在相互认识的人中传递,给出人与人的关系(是否认识),以及传言在某两个认识的人中传递所需的时间。求出以哪个人作为散布谣言的起点,能使得所有人都受到谣言的时间最短。
其中,输入n 表示n个人,下面有n行,第i行的第一个数m表示有m对关系 每一对的第一个数为j,第二个为w 表示,消息从i传播到j
需要w时间
思路:floyd 算出map[i][j] i到j的时间,找每行中最大的 然后在最大中找最小的,如果最小值min==MAX
说明不可达
#include <stdio.h>
#define M 105
#define MAX 10000
int main ()
{
n,m,i,j,k,w;
map[M][M];
("%d",&n)&&n)
for (i = 1;i <= n;i ++)
for (j = 1;j <= n;j ++)
map[i][j] = MAX;
for (i = 1;i <= n;i ++)
{
scanf ("%d",&m);
while (m--)
{
scanf ("%d%d",&j,&w);
map[i][j] = w;
}
}
for (k = 1;k <= n;k ++)
//floyd
for (i = 1;i <= n;i ++)
for (j = 1;j <= n;j ++)
{
if (map[i][j] > map[i][k]+map[k][j])
map[i][j] = map[i][k]+map[k][j];
}