poj 1125 Stockbroker Grapevine 最短路Floyd算法

http://poj.org/problem?id=1125

题意:有n个股票经纪人,要求从中选择一个作为散发谣言的开端,使得最后一个人收到谣言时时间时最短,当然谣言只能在有关联的两人这间传播。要注意从A到B和从B到A的时间并不等价!!

解题:典型的最短路问题,套用Floyd算法即可。

Source Code

Problem: 1125   User: 541780774
Memory: 408K   Time: 0MS
Language: G++   Result: Accepted


Source Code

#include<stdio.h>  #include<stdlib.h>  #include<string.h>  int map[101][101],n;//顶点数n   void Floyd()  {    int i,j,k;    for(k=0;k<n;k++)    for(i=0;i<n;i++)    for(j=0;j<n;j++)    {      if(map[i][j]>map[i][k]+map[k][j]&&i!=j)         map[i][j]=map[i][k]+map[k][j];    }  }             main()  {        int i,j,m,min,max,a,b,ans;        while(scanf("%d",&n),n!=0)        {          for(i=0;i<n;i++)          for(j=0;j<n;j++)             map[i][j]=1000;          for(i=0;i<n;i++)          {            scanf("%d",&m);            while(m--)            {              scanf("%d%d",&a,&b);              map[i][a-1]=b;            }          }          Floyd();          min=1000;          ans=0;          for(i=0;i<n;i++)          {            max=0;            for(j=0;j<n;j++)            {              if(i!=j&&map[i][j]>max)              max=map[i][j];            }            if(min>max)            {              min=max;              ans=i;            }          }          printf("%d %d\n",ans+1,min);        }        system("pause");  }
posted @ 2011-02-10 17:57  CoderZhuang  阅读(138)  评论(0编辑  收藏  举报