分享一下我老师大神的人工智能教程!零基础,通俗易懂!http://blog.csdn.net/jiangjunshow
也欢迎大家转载本篇文章。分享知识,造福人民,实现我们中华民族伟大复兴!
最近对问题?
设p1=(x1,y1), p2(x2,y2), ....,pn=(xn,yn)是平面上n个点构成的集合S,最近对问题就是找出集合S中距离最近的点对。
两种算法思想:
1. 蛮力法:顾名思义,利用正常的思维,使用强硬的方式求解出结果。
2. 分治法:分治,分而治之,把大问题分解为小问题,主要有三个过程:划分、求解子问题、合并。
直接上代码:
蛮力法求解最近对问题:
#include "iostream" #include "math.h" #include "time.h"#include "stdlib.h" using namespace std; struct P {
int x; int y; }; double ClosePoints(int n,P a[],int &index1,int &index2) { double d; double Dist=10000; for (int i=0;i<n-1;i++) { for (int j=i+1;j<=n-1;j++) { d=(a[i].x-a[j].x)*(a[i].x-a[j].x)+(a[i].y-a[j].y)*(a[i].y-a[j].y); if(d<=Dist) { Dist=d; index1=i; index2=j; } } } return Dist; } void main (void) { clock_t start,en