凸包问题---蛮力法求解

#include<stdio.h>
typedef struct{
	int x;
	int y;
	int flag;
}tubao;
typedef struct{
	tubao a[10];
	int len;
}Point;
Point p;  

void shuru(Point &p){
	int n;
	printf("请输出点的个数:");
	scanf("%d",&n);
	
	for(int i=0;i<n;i++)
	{
		printf("请输出第%d个点的横纵坐标:",i+1);
		scanf("%d%d",&p.a[i].x,&p.a[i].y);
    	p.len++;
	}
}


void convexhull(Point &p)
{
    int i,j,k;
    int a,b,c;
    int sign1,sign2;
    for(i=0;i<p.len;i++)
    {
        for(j=i+1;j<p.len;j++)
        {
            a = p.a[j].y-p.a[i].y;
            b = p.a[i].x-p.a[j].x;
            c = (p.a[i].x * p.a[j].y)-(p.a[i].y*p.a[j].x);
            sign1=0;
            sign2=0;
            for(k=0;k<p.len;k++)
             {
                if((k==j)||(k==i)) continue;
                if((a*p.a[k].x + b*p.a[k].y) ==c)
                {
                    ++sign1;++sign2;
                }
                if((a*p.a[k].x + b*p.a[k].y)>c)
                {
                    ++sign1;
                }
                if((a*p.a[k].x + b*p.a[k].y)<c)
                {
                    ++sign2;
                }
 
            }
            if(((sign1==(p.len-2))||(sign2==(p.len-2))))
            {
                p.a[i].flag=1;
                p.a[j].flag=1;
            }
        }
    }
}

void Jidian(Point &p)
{
	for(int i=0;i<p.len;i++)
	{
		if(p.a[i].flag==1)
			printf("(%d,%d)\n",p.a[i].x,p.a[i].y);
	}
}

void print(Point &p)
{
	for(int i=0;i<p.len;i++)
	{
		printf("%5d%5d%5d\n",p.a[i].x,p.a[i].y,p.a[i].flag);
	}
}

void main()
{
  printf("请输入各点横纵坐标:\n");
  shuru(p);
  convexhull(p);
  printf("以上各点若为极点,其flag=1\n");
  print(p);
  printf("在此凸包问题中,极点如下:\n");
  Jidian(p);
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值