UVA - 10803 Thunder Mountain 最短路的最大值

来源:互联网 发布:笨办法学python吧 编辑:程序博客网 时间:2024/06/05 09:30

题目大意:有N个乡村,如果乡村间的距离大于10的话就表示两乡村之间不能直接连通,求连通的乡村中,两个乡村间的最大距离是多少

解题思路:将距离大于10的乡村间的距离设置为INF,再用floyd求出乡村间的最小值,接着取最大值即可

#include<cstdio>#include<cstring>#include<algorithm>#include<cmath>using namespace std;#define maxn 105#define INF 1000000000double g[maxn][maxn];double x[maxn],y[maxn];int main() {int test,num,mark = 1;scanf("%d",&test);while(test--) {int num;scanf("%d",&num);for(int i = 0; i < num; i++)scanf("%lf%lf",&x[i],&y[i]);for(int i = 0; i < num; i++)for(int j = 0; j < num; j++)g[i][j] = INF;double temp;for(int i = 0; i < num; i++)for(int j = 0; j < num; j++) {g[i][j] = sqrt((x[i] - x[j]) * (x[i] - x[j]) + (y[i] - y[j]) * (y[i] - y[j]));if(g[i][j] > 10.0)g[i][j] = INF;}for(int k = 0; k < num; k++)for(int i = 0; i < num; i++)for(int j = 0; j < num; j++)if(g[i][k] + g[k][j] < g[i][j])g[i][j] = g[i][k] + g[k][j];double ans = 0;for(int i = 0 ; i < num; i++)for(int j = 0; j < num; j++) if(i != j) {if(g[i][j] > ans)ans = g[i][j];}printf("Case #%d:\n",mark++);if(fabs(ans - INF) < 1)printf("Send Kurdy\n");elseprintf("%.4lf\n",ans);printf("\n");}return 0;}


0 0
原创粉丝点击