求助思路用海伦
查看原帖
求助思路用海伦
780505
x1489631649楼主2024/8/12 12:54
#include<bits/stdc++.h>
using namespace std;
struct point{
	long long x,y;
}p[105];
double check(int a,int b,int c)
{
	double k1=(abs(p[a].y-p[b].y))*1.0/(abs(p[a].x-p[b].x));
	double b1=(p[a].y-p[a].x*k1);
	double k2=(abs(p[c].y-p[b].y))*1.0/(abs(p[c].x-p[b].x));
	double b2=(p[c].y-p[c].x*k2);
	if(k1==k2&&b1==b2)
		return 1;
	else return 0;
}
double jl(int a,int b)
{
	return sqrt((p[a].x-p[b].x)*(p[a].x-p[b].x)+(p[a].y-p[b].y)*(p[a].y-p[b].y));
}
double mj(int a,int b,int c)
{
	double A,B,C;
	A=jl(b,c);
	B=jl(a,c);
	C=jl(a,b);
	double bzc;
	bzc=(A+B+C)*1.0/2;
	return sqrt(bzc*(bzc-A)*(bzc-B)*(bzc-C));
}
int main()
{
//	freopen(".in","r",stdin);
//	freopen(".out","w",stdout);
	int T;
	cin>>T;
	while (T--)
	{
		int n;
		cin>>n;
		for(int i=1;i<=n;i++)
			cin>>p[i].x>>p[i].y;
		double ans=-1;
		for (int i=1;i<=n;i++)
		{
			for (int j=i+1;j<=n;j++)
			{
				for (int k=j+1;k<=n;k++)
				{
					if(check(i,j,k)==0) 
					{
						double mianji=mj(i,j,k);
						if(ans==-1)
							ans=mianji;
						else ans=min(ans,mianji);
					}
				}
			}
		}
		if(ans==-1)
			cout<<-1<<endl;
		else printf("%.10lf\n",ans);
	}
	return 0;
}
2024/8/12 12:54
加载中...