提交时间:2024-06-01 16:07:30

运行 ID: 150158

#include<bits/stdc++.h> using namespace std; const int N=200; struct Node { int x,y; }mp[N]; int n;double f[N][N],D[N]; void floyed(){ for(int i=1;i<=n;i++){ for(int j=1;j<=n;j++){ for(int k=1;k<=n;k++){ f[i][j]=min(f[i][j],f[i][k]+f[k][j]); } } } } double d(int a,int b){ return sqrt((mp[a].x-mp[b].x)*(mp[a].x-mp[b].x)+(mp[a].y-mp[b].y)*(mp[a].y-mp[b].y)); } double maxn(int k){ double Maxn=0; for(int i=1;i<=n;i++)if(f[i][k]!=0x7ffff&&i!=k)Maxn=max(Maxn,f[i][k]); return Maxn; } int main(){ cin>>n; for(int i=1;i<=n;i++)cin>>mp[i].x>>mp[i].y; for(int i=1;i<=n;i++)for(int j=1;j<=n;j++)f[i][j]=0x7ffff; for(int i=1;i<=n;i++){ for(int j=1;j<=n;j++){ char a; cin>>a; if(a=='1'){ f[j][i]=f[i][j]=d(i,j); } } } floyed(); double MIN=0x7ffff; for(int i=1;i<=n;i++)D[i]=maxn(i); for(int i=1;i<n;i++){ for(int j=i+1;j<=n;j++){ if(f[i][j]==0x7ffff)MIN=min(MIN,D[i]+D[j]+d(i,j)); } } printf("%0.6lf",MIN); }