#include

#include

定义存储struct Point //点坐标的结构

举止

PS x;

int y;

}

因为在struct Dj //算法执行中把中间过程的点的集合存储在链表中,所以在此定义具有另一个后续指针的点坐标的构造体。

举止

PS x;

int y;

struct Dj* next;

}

struct Dj Phead; //最终将凸包的各顶点保存在一个链表中,在此定义该链表的开头节点

结构DJ pend; //上述链表的末尾节点

void fz(struct Point pmin,struct Point pmax,struct Dj* P) //分治法的反复算法函数,三个参数分别是线段的两个端点和应判断的点的集合

举止

PK (PS!=NULL) //判断点集是否为空

举止

int mid=0; //定义点距线段的最远距离

struct Dj* no; //定义存储要处理的点的集合

结构点pmid; //定义最远的点

pmid.x=(*P).x; pmid.y=(*P).y; //初始化最远的点

struct Dj* Pl=NULL,* Pr=NULL; //初始化以下迭代的两个点集

struct Dj* Pln=NULL,* Prn=NULL; //初始化存储下一次迭代的两个点集的当前位置

mid=-((pmax.y-pmin.y ) * pmid.x-(pmax.x-pmin.x ) * pmid.y-pmax.y * pmin.y * pmax.x; //从初始化点到线段的最远距离

no=(*P).next; //初始化存储要处理点的集合

int n=1;

PS (否!=NULL) //更新最远距离和最远距离的点

举止

n;

if (-((pmax.y-pmin.y ) * (* no ).x-(pmax.x-pmin.x ) * (* no ).y-pmax.y * pmin.y * pmax.x ) mid )

举止

mid=-((pmax.y-pmin.y ) * (* no ).x-(pmax.x-pmin.x ) * (* no ).y-pmax.y * pmin.y * pmax.x );

pmid.x=(*否).x; pmid.y=(*否).y;

以下

no=(*no).next;

以下

打印(' % s % d % s % s % s ','('、' pmid.x,'、'、pmid.y,')','; //输出最远距离的点

no=P;

struct Dj no1[50];

int i=0;

PS (否!=NULL) //将最远距离点的两侧的点分别放入点集中

举止

no1[i]=*no;

no1[i].next=NULL;

if ((pmid.y-pmin.y ) * no1 [ I ].x-(pmid.x-pmin.x ) * no1 [ I ].y-pmid.y * pmin.y * pmid.x0 )//在直线方程式的判定位置上带点

举止

PS (K==null )

{Pl=(no1[i] ); Pln=(no1[i] ); 以下

else

{(*Pln).next=(no1[i] ); 以下

以下

else if ((pmax.y-pmid.y ) * no1 [ I ].x-(pmax.x-pmid.x ) * no1 [ I ].y-pmax.y * pmid.x * pmid.y * pmax.x0 )//将点带入直线方程式的判定位置

举止

PS (PS==null )

{Pr=(no1[i] ); Prn=(no1[i] ); 以下

else

{(*Prn).next=(no1[i] ); 以下

以下

no=(*no).next;

I;

以下

重复以fz(pmin,pmid,Pl) //原始线段的左侧点和最远的距离点为线段的两个端点和左侧点集

用线段的两个端点和右侧点集重复fz(pmid,pmax,Pr) //最远的距离点和原始线段的右侧点

以下

}

void main ()

举止

PS;

printf ('请输入点数: ' );

扫描(' % d ',n );

printf ('请输入各点: ' );

结构点a [ 50 ]; //定义大的数组,保证能安装所有的点

int i=0;

for(i=1; i=n; 依次输入i ) //点

举止

扫描(' % d ',a[i-1].x );

扫描(' % d ',a[i-1].y );

以下

结构点pmax=a[0],pmax=a[0];

for(i=1; ipmax.x )

pmax=a[i];

以下

Phead.x=pmin.x; Phead.y=pmin.y; Phead.next=NULL;

Pend.x=pmax.x; Pend.y=pmax.y; Pend.next=NULL; //把横轴的最大和最小的点放在最终的链表中

Phead.next=Pend;

struct Dj* Pup=NULL,* Pdown=NULL;

struct Dj* Pupn=NULL,* Pdownn=NULL; //初始化横轴的最大和最小点构成线段的上侧和下侧两个点集

struct Dj mid[50];

for(i=0; i0) //向下方的点集添加点

举止

if (Pdown==NULL )

举止

Pdown=(mid[i] );

PDO WNN=(PS [ I ] );

以下

else

{(*Pdownn).next=(mid[i] );

PDO WNN=(PS [ I ] ); 以下

以下

以下

printf ('构成凸包的顶点分别为: ' );

打印(' % s % d % s % s % s ',' ('.pmin.x,',',pmin.y,')',';

打印(' % s % d % s % s % s ','('、pmax.x,'、pmax.y,')','; //输出横轴的最大和最小的点

fz(pmin、pmax、Pup )

使用fz(pmax、pmin、Pdown) //分数函数处理上侧和下侧两个点集

系统(' pause ' );

以下

果园篱笆c语言算法,凸包问题(果园篱笆)相关推荐

  1. 果园篱笆c语言算法,天然篱笆墙:果园栽种这几种树

    提要:天然篱笆墙:果园围墙换成这几样树木,小动物都进不去 为了防止小偷进入果园偷水果,果园常常筑起一圈围墙,一是便于看管,二也可以防止小动物进入践踏果园,可是筑围墙投入成本太大,有什么好的植物种植替可 ...

  2. c语言凸包算法,基于C语言的凸包算法实现

    基于C语言的凸包算法实现 非计算机专业,代码有些的不好的地方,大佬轻喷^ _ ^ 根据要求,需要使用C语言实现凸包算法--Graham扫描法,本文将从算法理解.实现思路.遇到的问题及其解决方案三个方面 ...

  3. 果园机器人反思稿_语文《果园机器人》教学反思

    语文<果园机器人>教学反思 身为一名人民教师,课堂教学是重要的任务之一,教学的心得体会可以总结在教学反思中,怎样写教学反思才更能起到其作用呢?以下是小编收集整理的语文<果园机器人&g ...

  4. c语言单片机求最小公倍数,单片机常用的14个C语言算法,要熟记在心哦!

    原标题:单片机常用的14个C语言算法,要熟记在心哦! 算法(Algorithm):计算机解题的基本思想方法和步骤. 算法的描述:是对要解决一个问题或要完成一项任务所采取的方法和步骤的描述,包括需要什么 ...

  5. 易语言html规则分析,易语言算法原理浅析【一】(示例代码)

    注: 如果你看完了下面的文章.就来试试这个KeyGenMe吧,相信你能有所收获. 一.文章开头首先我们要贴上一段易语言代码,并且编译这段代码,从汇编角度分析易语言程序编译后,易语言算法在汇编中的实现过 ...

  6. c语言约瑟夫环问题,C++_详解约瑟夫环问题及其相关的C语言算法实现,约瑟夫环问题 N个人围成一圈 - phpStudy...

    详解约瑟夫环问题及其相关的C语言算法实现 约瑟夫环问题 N个人围成一圈顺序编号,从1号开始按1.2.3......顺序报数,报p者退出圈外,其余的人再从1.2.3开始报数,报p的人再退出圈外,以此类推 ...

  7. 编写一个字节数的rtu C语言校验程序,Modbus通信协议中CRC校验的快速C语言算法

    Modbus通信协议中CRC校验的快速C语言算法 2004年第11期 福 建 电 脑 63 Modbus通信协议中CRC校验的快速C语言算法 孟开元 (西安石油大学计算机学院陕西西安710065) [ ...

  8. c语言编常见算法,5个常见C语言算法

    5个常见C语言算法 十进制转换为二进制的递归程序 字符串逆置的递归程序 整数数位反序,例如12345->54321 四舍五入程序(考虑正负数) 二分法查找的递归函数 #include #incl ...

  9. 算法与数据结构c语言版PPT,C语言算法与数据结构.ppt

    C语言算法与数据结构.ppt 第十二章 算法与数据结构12.1 算法的基本概念,该节知识点所占试题比重为12,属于重点考查对象,基本上每次必考,主要考查算法的定义和对算法复杂度的理解.历次试题分值在0 ...

最新文章

  1. C 语言 结构体_finddata_t _findfirst, _findnext, _findclose 函数讲解
  2. 就是这么霸道,使用OpenCV10行代码实现人脸检测
  3. 使用匿名函数和内嵌函数处理多变量传递问题
  4. 关于mybatis里面的Executor--转载
  5. ZOJ 2588 Burning Bridges 割边
  6. python集合例题_python练习题集合-2
  7. 嵌入式软件架构设计分层思路
  8. python、java大作战,python测试dubbo接口
  9. python typing typescript_typescript
  10. 多个ORACLE HOME时的程序连接
  11. Volatile的实现原理(看这篇就够了)
  12. asp.net读写XML小结
  13. 红帽linux安装wordpress,linux Centos怎么安装wordpress
  14. 大数据时代已经来临,正在改变我们的生活
  15. 电脑上装WPS好还是office好【图解】
  16. Lower power design UPF 学习
  17. POJ 3580 SuperMemo(伸展树的几个基本操作)
  18. iphone13 Pro的运行内存是6gb
  19. adb shell input keyevent 模拟按键事件
  20. 问题描述-缺少关键字KeyError Traceback (most recent call last) <ipython-input

热门文章

  1. Python爬虫:抓取多级页面数据
  2. 【uni-app】基础
  3. [培训-无线通信基础-10]:正交频分复用(OFDM、符号间多径干扰)
  4. ESXI8.0一键安装黑群晖DSM7
  5. java 文件删除不了File类的delete方法删不掉文件的原因分析
  6. 数值分析学习(一)之交叉法(Bracketing Methods)求根
  7. 计算机上静音快捷键是什么,电脑静音快捷键是什么(如何设置电脑一键静音?)...
  8. GitLab合并请求时出现 Validate branchesCannot Create: This merge request already existed
  9. 学习云计算技术前景在哪里?云计算技术发展趋势
  10. 龙蜥降世,神龙升级,灵杰亮相,阿里云再出神器