超时是什么鬼,求大佬解答!
查看原帖
超时是什么鬼,求大佬解答!
43763
Mistysun楼主2021/6/6 20:12
#include<bits/stdc++.h>
#define INF 1e9+7
using namespace std;
int n,x;
char st[1005];
double f[250][250],dis[250],ans,minn;
struct node
{
	double x;
	double y;
} a[250];
int main()
{
	ios::sync_with_stdio(false);
	scanf("%d",&n);
	for(int i=1;i<=n;i++)
	{
		//cin>>a[i].x>>a[i].y;
		scanf("%lf%lf",&a[i].x,&a[i].y);
		//printf("%f\n",a[i].x);
	}
	for(int i=1;i<=n;i++)
		for(int j=1;j<=n;j++)f[i][j]=INF;
	for(int i=1;i<=n;i++)
	{
		scanf("%s",st);
	//int k=strlen(st);
		for(int j=0;j<n;j++)
			if(st[j]=='1')	
			{
				j++; 
				f[i][j]=sqrt(abs((a[i].y-a[j].y)*(a[i].y-a[j].y)+((a[i].x-a[j].x)*(a[i].x-a[j].x)))*1.0);
				//printf("%.6llf",f[i][j]);	
				//f[i][j]=sqrt((pow(a[i].x-a[j].x,2)+pow(a[i].y-a[j].y,2))*1.0);
				j--;
			}
	}
	for(int i=1;i<=n;i++)
	//	for(int j=1;j<=n;j++)if(f[i][j]!=INF)printf("%llf",f[i][j]);
	for(int k=1;k<=n;k++)
		for(int i=1;i<=n;i++)
			for(int j=1;j<=n;j++)
			{
				if(i!=k&&k!=j&&i!=j)
				if(f[i][k]<INF&&f[k][j]<INF)
					if(f[i][j]>f[i][k]+f[k][j])
						f[i][j]=f[i][k]+f[k][j];
			}
	//printf("%llf",f[1][2]);
	for(int i=1;i<=n;i++)
		for(int j=1;j<=n;j++)
		{
			if(f[i][j]<INF)
			 dis[i]=max(dis[i],f[i][j]);	
		} 
	//for(int i=1;i<=n;i++)printf("%llf ",dis[i]);
	minn=100000007;
	for(int i=1;i<=n;i++)
		for(int j=1;j<=n;j++)
		{
			if(f[i][j]==INF&&i!=j)
			{
				int len=sqrt((a[i].y-a[j].y)*(a[i].y-a[j].y)+((a[i].x-a[j].x)*(a[i].x-a[j].x))*1.0);
				minn=min(minn,dis[i]+dis[j]+len);
			}	
		}
	printf("%.6lf",minn);
	return 0;	
} 
2021/6/6 20:12
加载中...