萌新求助,实在找不出错误在哪,输出全是0
查看原帖
萌新求助,实在找不出错误在哪,输出全是0
416769
Fube楼主2022/5/14 21:57

代码:

#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;
}
2022/5/14 21:57
加载中...