代码:
#include <bits/stdc++.h>
using namespace std;
int n,m;
double r1,r2,x[200],y[200],a[200][200],b[200],z;
char ch;
int main()
{
scanf("%d",&n);
for(int i=1;i<=n;i++)
scanf("%d%d",&x[i],&y[i]);
for(int i=1;i<=n;i++)
{
for(int j=1;j<=n;j++){
cin>>ch;
a[i][j]=2147483647;
if(ch=='1')
a[j][i]=a[i][j]=sqrt(abs(x[i]-x[j])*abs(x[i]-x[j])+abs(y[i]-y[j]*abs(y[i]-y[j])));
}
}
for(int k=1;k<=n;k++)
for(int i=1;i<=n;i++)
for(int j=1;j<=n;j++)
if(i!=j&&j!=k&&i!=k&&a[i][j]>a[i][k]+a[k][j])
a[i][j]=a[i][k]+a[k][j];
for(int i=1;i<=n;i++)
{
m=0;
for(int j=1;j<=n;j++)
if(a[i][j]>m&&a[i][j]!=2147483647)
m=a[i][j];
b[i]=m;
r1=max(b[i],r1);
}
r2=2147483647;
for(int i=1;i<=n;i++)
for(int j=1;j<=n;j++)
if(a[i][j]==2147483647&&i!=j)
r2=min(r2,b[i]+b[j]+sqrt(abs(x[i]-x[j])*abs(x[i]-x[j])+abs(y[i]-y[j]*abs(y[i]-y[j]))));
printf("%.6lf",max(r1,r2));
return 0;
}