n 개의 3d 점 (x, y, z)가있는 집합 A와 m 개의 3d 점 (x, y, z)을 갖는 B 집합이 있습니다. 집합 A의 각 점 (Xi, Yi, Zi)에 대해 (Xi, Yi, Zi)로부터 최소 거리를 가진 집합 B에서 점을 찾아야합니다.집합 A의 점에서 집합 B의 점까지의 최단 거리를 찾는 알고리즘
코드에 주어진 제한 시간이 부족합니다. 도와주세요.
#include<stdio.h>
#include<stdlib.h>
#include<math.h>
long long np[50000][3],qp[50000][3];
int main()
{
long long n,q,i,j,d,ans,min;
scanf("%lld",&n);
for(i=0;i<n;i++)
scanf("%lld%lld%lld",&np[i][0],&np[i][0],&np[i][2]);
scanf("%lld",&q);
for(i=0;i<q;i++)
scanf("%lld%lld%lld",&qp[i][0],&qp[i][1],&qp[i][2]);
for(i=0;i<q;i++)
{
ans=0;
min=((qp[i][0]-np[0][0])*(qp[i][0]-np[0][0]))+((qp[i][1]-np[0][1])*(qp[i][1]-qp[0][1]))+((qp[i][2]-np[0][2])*(qp[i][2]-np[0][2]));
for(j=0;j<n;j++)
{
d=((qp[i][0]-np[j][0])*(qp[i][0]-np[j][0]))+((qp[i][1]-np[j][1])*(qp[i][1]-qp[j][1]))+((qp[i][2]-np[j][2])*(qp[i][2]-np[j][2]));
if(d<min)
{
ans=j;
min=d;
}
}
printf("%lld\n",ans);
}
return 0;
}
주어진 시간 제한은 무엇입니까 ?? – james
[점 알고리즘 간의 최단 거리] (http://stackoverflow.com/questions/1602164/shortest-distance-between-points-algorithm)를보십시오. – JAB
자세한 내용을 입력하십시오. 코드에 결함이 있으며 무한 루프가 발생합니까? 아니면 더 작은 데이터 세트에서 작동하며 더 큰 데이터 세트에 너무 많은 시간이 걸립니다. – mbeckish