COJ1219(建食堂)

题目链接

题目大意:给出n个公寓的互相距离,选择在其中一个公寓楼下建食堂,要求食堂到最远的公寓的距离最短。

使用floyd求最短路,最短距离存在dist[N][N]中,然后求每行的最大值,再在这些最大值中求最小值。

View Code
 1 #include <stdio.h>

 2 #define MAX(a,b) ((a)>(b)?(a):(b))

 3 #define MIN(a,b) ((a)<(b)?(a):(b))

 4 #define INF 0x7ffffff

 5 #define N 100

 6 int dist[N][N];

 7 int main()

 8 {

 9     int i,j,k,n,m,a,b,d,ans;

10     while(~scanf("%d%d",&n,&m))

11     {

12         for(i=0;i<n;i++)

13             for(j=i+1;j<n;j++)    dist[i][j]=dist[j][i]=INF;

14         for(i=0;i<m;i++)

15         {

16             scanf("%d%d%d",&a,&b,&d);

17             dist[a][b]=dist[b][a]=d;

18         }

19         for(k=0;k<n;k++)

20             for(i=0;i<n;i++)

21                 for(j=0;j<n;j++)

22                     dist[i][j]=MIN(dist[i][j],dist[i][k]+dist[k][j]);

23         for(i=0;i<n;i++)

24             for(j=1;j<n;j++)    dist[i][0]=MAX(dist[i][0],dist[i][j]);

25         ans=dist[0][0];

26         for(i=1;i<n;i++)    ans=MIN(ans,dist[i][0]);

27         if(ans==INF) printf("Can not\n");

28         else    printf("%d\n",ans);

29     }

30     return 0;

31 }

 

你可能感兴趣的:(OJ)