第11个点wa,求助!悬赏一个关注!
查看原帖
第11个点wa,求助!悬赏一个关注!
415970
变异哥斯拉楼主2022/8/17 10:28
#include<bits/stdc++.h>
using namespace std;
int n;
char ch;
double dis[160][160],mi[160],minx=1e20,r,t,x[160],y[160],inf=1e12;
double di(int u,int v){
	return sqrt((x[u]-x[v])*(x[u]-x[v])+(y[u]-y[v])*(y[u]-y[v]));
}
int main(){
	cin>>n;
	for(int i=1;i<=n;i++)cin>>x[i]>>y[i];
	for(int i=1;i<=n;i++){
		for(int j=1;j<=n;j++){
			cin>>ch;
			if(ch=='1')dis[i][j]=di(i,j);
			else dis[i][j]=inf;
		}
	}
	for(int k=1;k<=n;k++){
		for(int i=1;i<=n;i++){
			for(int j=1;j<=n;j++){
				if(i!=j&&i!=k&&j!=k){
					if(dis[i][k]<inf-1&&dis[k][j]<inf-1){
						if(dis[i][j]>dis[i][k]+dis[k][j])
						dis[i][j]=dis[i][k]+dis[k][j];
					}
				}
			}
		}
	}
	memset(mi,0,sizeof(mi));
	for(int i=1;i<=n;i++){
		for(int j=1;j<=n;j++){
			if(dis[i][j]<inf-1&&mi[i]<dis[i][j])mi[i]=dis[i][j];
		}
	}
	for(int i=1;i<=n;i++){
		for(int j=1;j<=n;j++){
			if(i!=j&&dis[i][j]>inf-1){
				t=di(i,j);
				if(minx>mi[i]+mi[j]+t)minx=mi[i]+mi[j]+t;
			}
		}
	}
	for(int i=1;i<=n;i++)minx=max(minx,mi[i]);
	printf("%.6lf",minx);
	return 0;
}
2022/8/17 10:28
加载中...