求助0分
查看原帖
求助0分
285617
黑影洞人楼主2021/9/20 11:03
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<cmath>
using namespace std;
double f[151][151],m[151],minx,r,temp, x[151],y[151],maxint=10000;
double dist(int i,int j){
	return sqrt((x[i]-x[j])*(x[i]-x[j])+(y[i]-y[j])*(y[i]-y[j]));
}
int main(){
	int i,n,j,k;
	char c[1212];
	scanf("%d",&n);
	for(i=1;i<=n;i++){
		scanf("%lf%lf",&x[i],&y[i]);
	}
	for(i=1;i<=n;i++){
		scanf("%s",c);
		for(j=1;j<=n;j++){
			if(c[j-1]-'0')f[i][j]=dist(i,j);
			else if(i==j)f[i][j]=0;
			else f[i][j]=maxint;
			printf("%lf\n",f[i][j]);
		}
	}
	for(k=1;k<=n;k++){
		for(i=1;i<=n;i++){
			for(j=1;j<=n;j++){
				if((i!=j)&&(i!=k)&&(i!=k))
						if(f[i][k]<maxint-1&&f[k][j]<maxint-1)
							if((f[i][k]+f[k][j])<f[i][j])
								f[i][j]=f[i][k]+f[k][j];
			}
		}
	}
	memset(m,0,sizeof(m));
	for(i=1;i<=n;i++){
		for(j=1;j<=n;j++){
			if(f[i][j]<maxint-1&&m[i]<f[i][j])m[i]=f[i][j];
		}
	}
	minx=10000;
	for(i=1;i<=n;i++){
		for(j=1;j<=n;j++){
			if(i!=j&&f[i][j]>f[i][j]&&f[i][j]>maxint-1){
				temp=dist(i,j);
				if(minx>m[i]+m[j]+temp)minx=m[i]+m[j]+temp;
			}
		}
	}
	r=0;
	for(i=1;i<=n;i++){
		if(m[i]>minx)minx=m[i];
	}
	printf("%.6lf",minx);
	return 0;
}

2021/9/20 11:03
加载中...