C++解决凸包问题
#include<stdio.h>
#include<math.h>
struct Point{
int x;
int y;
int flag;
}point[9]={
{2,3,0},
{1,7,0},
{3,-2,0},
{2,-3,0},
{5,4,0},
{5,-1,0},
{3,7,0},
{1,9,0},
{4,2,0}
};
void main(){
printf("点的坐标为:\n");
for(int i=0;i<9;i++){
printf("(%d,%d)\n",point[i].x,point[i].y);
}
printf("\n");
int a,b,c,sign1,sign2;
for(i=0;i<9;i++){
for(int j=i+1;j<9;j++){
a=point[j].y-point[i].y;
b=point[i].x-point[j].x;
c=((point[i].x)*(point[j].y))-((point[i].y)*(point[j].x));
sign1=0;
sign2=0;
for(int k=0;k<9;k++){
if((k==j)||(k==i)){
continue;
}
if((a*point[k].x)+(b*point[k].y)==c){
sign1++;
sign2++;
}
if((a*point[k].x)+(b*point[k].y)>c){
sign1++;
}
if((a*point[k].x)+(b*point[k].y)<c){
sign2++;
}
}
if(sign1==7||sign2==7){
point[i].flag=1;
point[j].flag=1;
}
}
}
printf("凸包点的坐标为:\n");
for(i=0;i<9;i++){
if((point[i].flag==1)){
printf("(%d,%d)\n",point[i].x,point[i].y);
}
}
}
运行结果如下图所示: