最近研究了解决凸包问题的算法,查阅了很多资料,现记录如下,将分3次分别记录蛮力法,GrahamScan和分治方法,如有发现问题请留言,谢谢!
暴力解决法:考虑Q中的任意四个点A、B、C、D,如果A处于BCD构成的三角形内部,那么A一定不属于凸包P的顶点集合。
实现代码如下:
#include<stdio.h>
#include<stdlib.h>
#include<windows.h>
#define MAX_SIZE 10001
struct Point{
int x,y;};
//判断z点与x、y点构成的直线的方位
double g1(struct Point x,struct Point y,struct Point z);
void CalculateCH1(struct Point p[MAX_SIZE],int length,int mark[MAX_SIZE]);
//暴力算法
int main()
{
int i,n,j;
struct Point p[MAX_SIZE];
int mark[MAX_SIZE];
//double start,end;
// CPU频率
LARGE_INTEGER li;
// 记录过程时间
LONGLONG start,end,fred;
// 获取CPU频率
QueryPerformanceFrequency(&li);
fred = li.QuadPart;
//读取信息与写入的文件
freopen("input.txt", "r", stdin);
freopen("outputbf1.txt","w",stdout);
while(scanf("%d",&