deepl机翻:
题目数据范围很小,跑floyd绰绰有余。我们之前做的最短路是指起点到终点所经过的最短路径,但是这个题的最短路指从一个石块到另一个石块最小距离,所以跑floyd的时候判断条件稍微有所修改。
AC Code:
#include <iostream>
#include <cstdio>
#include <algorithm>
#include <stack>
#include <vector>
#include <map>
#include <queue>
#include <cstring>
#include <cmath>
#include <set>
typedef long long ll;
#define INF 0x3f3f3f3f
const double PI=acos(-1);
const double eps=1e-6;
const int mod=1e9+7;
const int N=205;
int n,cnt;
double f[N][N];
struct node{
double x,y;
}e[N];
double getdis(int i,int j){
return sqrt((e[i].x-e[j].x)*(e[i].x-e[j].x)+(e[i].y-e[j].y)*(e[i].y-e[j].y));
}
void floyd(){
for(int k=1;k<=n;k++){
for(int i=1;i<=n;i++){
for(int j=i+1;j<=n;j++){
if(f[i][k]<f[i][j]&&f[k][j]<f[i][j]){
f[i][j]=f[j][i]=std::max(f[i][k],f[k][j]);
}
}
}
}
return;
}
int main(){
// freopen("test.in","r",stdin);
// freopen("output.in", "w", stdout);
while(std::cin>>n){
if(n==0) break;
memset(f,0,sizeof(f));
for(int i=1;i<=n;i++){
std::cin>>e[i].x>>e[i].y;
}
for(int i=1;i<=n;i++){
for(int j=1;j<=n;j++){
f[i][j]=getdis(i,j);
}
}
floyd();
printf("Scenario #%d\n",++cnt);
printf("Frog Distance = %.3f\n\n",f[1][2]);
}
return 0;
}
最后注意输出格式,因为少了一个换行PE了一发()