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 }

 

posted @ 2012-04-13 10:30  BeatLJ  阅读(196)  评论(0编辑  收藏  举报