题意:给出一些坐标,如果有两点的距离大于10的话,就代表无法到达,问是否是强连通求出最短路,,是的话就求出最短路的最大值
#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <cmath>
using namespace std;
const int MAXN = 110;
const int INF = 0x3f3f3f3f;
int x[MAXN],y[MAXN],n;
double g[MAXN][MAXN];
double dist(int i,int j){
return sqrt((x[i]-x[j])*(x[i]-x[j])+(y[i]-y[j])*(y[i]-y[j]));
}
void floyd(){
for (int k = 0; k < n; k++)
for (int i = 0; i < n; i++)
for (int j = 0; j < n; j++)
g[i][j] = min(g[i][j],g[i][k]+g[k][j]);
}
int main(){
int t = 0,cas=0;
scanf("%d",&t);
while (t--){
scanf("%d",&n);
for (int i = 0; i < n; i++)
scanf("%d%d",&x[i],&y[i]);
for (int i = 0; i < n; i++)
for (int j = 0; j < n; j++){
g[i][j] = dist(i,j);
if (g[i][j] > 10)
g[i][j] = INF;
}
floyd();
double Max = 0;
for (int i = 0; i < n; i++)
for (int j = 0; j < n; j++)
if (g[i][j] > Max)
Max = g[i][j];
if (Max == INF)
printf("Case #%d:\nSend Kurdy\n\n",++cas);
else printf("Case #%d:\n%.4lf\n\n",++cas,Max);
}
return 0;
}
,否则输出Send Kurdy