用分治算法解平面最接近点对问题.doc
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_05.gif)
《用分治算法解平面最接近点对问题.doc》由会员分享,可在线阅读,更多相关《用分治算法解平面最接近点对问题.doc(11页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、一. 用分治算法解平面最接近点对问题关于最接近点对问题:给定平面上n个点,找出其中一对点,使得在n个点所构成的所有点对中,该点对的距离最小。2. 程序详细介绍(各模块的功能等) 本程序主要包括两个类:类Point与类Ppoint.其中类PointPpoint为该程序的主要实现模块,该类中有输入点对的函数shuru,对所输入的点对按X轴排序的函数sort,求各点对的距离的函数xiao等.假设S中的点为平面上的点,它们都有2个坐标值x与y。为了将平面上点集S线性分割为大小大致相等的2个子集S1与S2,我们选取一垂直线l方程:x=m来作为分割直线。其中m为S中各点x坐标的中位数。由此将S分割为S1=
2、pS|pxm与S2=pS|pxm。从而使S1与S2分别位于直线l的左侧与右侧,且S=S1S2 。由于m是S中各点x坐标值的中位数,因此S1与S2中的点数大致相等。递归地在S1与S2上解最接近点对问题,我们分别得到S1与S2中的最小距离1与2.此即为该程序的大致算法.3. 程序构造流程图 该程序的流程图如下所示4. 调试与测试:调试方法,测试结果包括输入数据与输出结果的分析与讨论运行该程序时,屏幕上会出现一个界面,首先该界面会提示输入要处理的点对个数,输入点对个数后从键盘输入数字0即可显示出处理后的各个结果,会出现如下结果:第 11 页5.程序代码(源程序)#include#include#in
3、cludeusing namespace std;int i,j,k,d,m,n;double p2,q,s,r,t;class Point /创立一个点类/public: double x; double y; double getx()return x; double gety()return y;friend class Ppoint; class Ppointint sum;double juli1010;double min11; /min10用来存放每组中最短的距离/double mini11; /mini10用来存放每组中距离最短的点对中的第一个点/double minj11;
4、/minj10用来存放每组中距离最短的点对中的第二个点/Point p100;Point p1;public:void shuru()cout请输入要处理的点的个数sum;for(i=0;isum;i+) cout请输入点对 pi.x;cinpi.y; coutpi.x,pi.yendl;void sort() cout以下是按x轴上由小到大排序后的点对endl;for(i=0;isum-1;i+)for(j=i+1;jpj.x)p1=pi;pi=pj;pj=p1;for(i=0;isum;i+)coutpi.x,pi.yendl;void xiao() cout以下是对每个模块中的点求距离e
5、ndl; for(k=0;ksum/10;k+) cout按任意键继续i; cout以下是第k个模块中的距离endl;for(i=1;i10;i+)for(j=0;ji;j+)r=abs(pk*10+i.x-pk*10+j.x);t=abs(pk*10+i.y-pk*10+j.y);juliij=sqrt(r*r+t*t);coutjuliijt;coutendl; mink=julik0,minik=10*k+1,minjk=10*k;for(i=1;i10;i+)coutn第i行以前的最小值为minkendl;for(j=0;ji;j+)if(juliijmink)mink=juliij;
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 分治 算法 平面 最接近 问题
![提示](https://www.taowenge.com/images/bang_tan.gif)
限制150内