- 71
- 0
- 约3.36千字
- 约 5页
- 2016-12-29 发布于江苏
- 举报
源程序及注释:
#includeiostream
#includecstring
#includecmath
#includealgorithm
#includetime.h
using namespace std;
#define eps 1e-8
#define MAXN#define N 5000
struct Point
{
double x,y;
};
Point S[N*2],S1[N],S2[N],P1[N],P2[N];
double Distance(Point a,Point b)
{
return sqrt((a.x-b.x)*(a.x-b.x)+(a.y-b.y)*(a.y-b.y));
}
int cmp1(Point a, Point b)
{
return a.xb.x;
}
int cmp2(Point a, Point b)
{
return a.yb.y;
}
double min(double a,double b)
{
return ab?b:a;
}
//分治法求最近对问题
double ClosestPoints1(Point S[],int n)
{
int i,j,m;
if (n2) return MAXN;
else
{
double d0=MAXN;
double d,d1,d2;
int k1=0;
int k2=0;
int j1=0;
int j2=0;
sort(S,S+n,cmp1);
Point p=S[n/2];
m=p.x; //m=S中各点x坐标的中位数
for(i=0;i(n+1)/2;i++)
{
S1[j1].x=S[i].x;
S1[j1].y=S[i].y;
j1++;
} //构造S1中点的坐标小于m
for(i=(n+1)/2;in;i++)
{
S2[j2].x=S[i].x;
S2[j2].y=S[i].y;
j2++;
} //构造S2中点的坐标大于m
d1=ClosestPoints1(S1,j1);
d2=ClosestPoints1(S2,j2);
d=min(d1,d2);
for (i=0;ij1;i++)
if (m-S1[i].xd)
{
P1[k1].x=S1[i].x;
P1[k1].y=S1[i].y;
k1++;
} //构造P1为S1中点的坐标与m的距离小于d的点集
for (i=0;ij1;i++)
if (S2[i].x-md)
{
P2[k2].x=S2[i].x;
P2[k2].y=S2[i].y;
k2++;
} //构造P2为S2中点的坐标与m的距离小于d的点集
sort(P1,P1+k1,cmp2); //将P1中的点按y坐标升序排列
sort(P2,P2+k2,cmp2); //将P2中的点按y坐标升序排列
for(i=0;ik1;i++)
{
for(j=0;jk2;j++)
{
double ans=Distance(P1[i],P2[j]);
d0=min(d0,ans); //求最小距离
}
}
return min(d0,d);
}
}
//蛮力法求最近对问题
double ClosestPoints2(Point S[],int n)
{
double d0=MAXN;
for(int i=0;in;i++)
{
for(int j=i+1;jn;j++)
{
double d=Distance(S[i],S[j]);
if(dd0)
{
d0=d;
}
}
}
return d0;
}
//测试两种算法
int main()
{
int n=5000;
int i;
srand((unsigned)time(NULL));
for(i=0;in;i++)
{
S[i].x=rand()/(double)(RAND_MAX/10000);
S[i].y=rand()/(double)(RAND_MAX/10000);
} //产生随机点集
clock_t start1,end1,start2,end2;
start1=clock();
double d1=ClosestPoints1(S,n);
end1=clock();
您可能关注的文档
最近下载
- 2025年自来水供应专属承包合同样本版.docx VIP
- 2022化工安全与环保第二版课后题答案最新版(完整版).docx VIP
- 智能金融:AI 驱动的金融变革.pptx
- 人工智能在心血管无创影像中的应用:前沿技术与临床价值.pdf VIP
- 2025年氢燃料电池在数据中心储能应用趋势.docx
- 2026年中国铁路上海局集团有限公司招聘普通高校毕业生1236人备考题库及答案详解(考点梳理).docx VIP
- 井工煤矿复工复产开工第一课教案.docx VIP
- 社区居务监督培训课件.ppt VIP
- 心灵终结单位全代码.doc VIP
- 交流转辙机道岔动作电流故障曲线分析信号集中监测课件.pptx VIP
原创力文档

文档评论(0)