目录
1 实验名称
蛮力法的应用
2 实验目的
通过本实验,掌握蛮力法解决问题的算法效率分析方法,运用蛮力法解决问题的思想,解决实际问题。
3 实验内容
运用蛮力法的基本思想解决凸包问题或者最近对问题。打印输出。
4 实验设计及实现
#include<stdio.h>
#include<math.h>
#include<iostream>
using namespace std;
struct Point{
int x;
int y;
int flag;
};
int a,b,c;
int flag1,flag2;
int main(){
printf("请输入点的个数:\n");
int n;
scanf("%d",&n);
printf("请输入点的坐标:\n");
Point *point=new Point[n];
for(int i=0;i<n;i++)
scanf("%d%d",&point[i].x,&point[i].y);
for(int i=0;i<n;i++){
for(int j=i+1;j<n;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);
flag1=0;
flag2=0;
for(int k=0;k<n;k++){
if((k==j)||(k==i)){continue;}
if((a*point[k].x)+(b*point[k].y)==c){flag1++;flag2++;}
if((a*point[k].x)+(b*point[k].y)>c){flag1++;}
if((a*point[k].x)+(b*point[k].y)<c){flag2++;}
}
if(flag1==n-2||flag2==n-2){
point[i].flag=1;
point[j].flag=1;
}
}
}
printf("凸包点的坐标为:\n");
for(int i=0;i<9;i++)
if((point[i].flag==1))
printf("(%d,%d)\n",point[i].x,point[i].y);
return 0;
}