欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

三维空间找最近点

程序员文章站 2022-04-03 23:19:49
...

菜鸡只会数据很小很小的做法

给定三维空间上n个点,每个点都有xi,yi,zi三个坐标值.找出其中的一对点的距离,使得在这n个点的所有点对中,该距离为所有点对中最小的.
输入描述:
第一行输入整数n,(2<=n<=1e5)
第二行到第n+1行,每行输入xi,yi,zi三个整数,代表第i个点的坐标(-1e4<=xi,yi,zi<=1e4)
输出描述:
输出最近点对的距离,保留小数点后三位

最近的点应该也许大概可能会出现在坐标和最小点里面(或许一定)

#include<bits/stdc++.h>
using namespace std;
#define ll long long
#define sc(a) scanf("%d",&a);
const int maxn=1e5+5;
struct stu
{
	double s1=0,s2=0,s3=0,sumn=0;
	bool operator <(const stu&b)
	{
		return sumn<b.sumn;
	}
}st[maxn];
double ds(stu a,stu b)
{
	double sum=0;
	sum=sqrt((a.s1-b.s1)*(a.s1-b.s1)+(a.s2-b.s2)*(a.s2-b.s2)+(a.s3-b.s3)*(a.s3-b.s3));
	return sum;
}
int main()
{
	int n;
	sc(n);
	double min1=0x3f3f3f3f;
	for(int i=1;i<=n;i++)
		{
		cin>>st[i].s1>>st[i].s2>>st[i].s3;
		st[i].sumn=st[i].s1+st[i].s2+st[i].s3;
		}
		sort(st+1,st+1+n);
	for(int i=1;i<=n;i++)
		for(int j=i+1;j<i+29;j++)       //这里就纯瞎搞了哈哈
		{
			double sum1=ds(st[i],st[j]);
			min1=min(min1,sum1);
		}
		printf("%.3f",min1);
}
相关标签: AC