现在的位置: 首页 > 综合 > 正文

poj 1125 Stockbroker Grapevine(f…

2018年03月17日 ⁄ 综合 ⁄ 共 856字 ⁄ 字号 评论关闭
题意: (我算是半天看不懂他想干嘛)
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 ()
{
    int
n,m,i,j,k,w;
    int
map[M][M];
    while (scanf
("%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];
               
}
   

抱歉!评论已关闭.