三维空间最近点
菜鸡只会数据很⼩很⼩的做法
给定三维空间上n个点,每个点都有xi,yi,zi三个坐标值.出其中的⼀对点的距离,使得在这n个点的所有点对中,该距离为所有点对中最⼩的. 输⼊描述:
第⼀⾏输⼊整数n,(2<=n<=1e5)
dna测序第⼆⾏到第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);
}
36xp