果园篱笆c语言算法,凸包问题(果园篱笆)
#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语言算法,凸包问题(果园篱笆)相关推荐
- 果园篱笆c语言算法,天然篱笆墙:果园栽种这几种树
提要:天然篱笆墙:果园围墙换成这几样树木,小动物都进不去 为了防止小偷进入果园偷水果,果园常常筑起一圈围墙,一是便于看管,二也可以防止小动物进入践踏果园,可是筑围墙投入成本太大,有什么好的植物种植替可 ...
- c语言凸包算法,基于C语言的凸包算法实现
基于C语言的凸包算法实现 非计算机专业,代码有些的不好的地方,大佬轻喷^ _ ^ 根据要求,需要使用C语言实现凸包算法--Graham扫描法,本文将从算法理解.实现思路.遇到的问题及其解决方案三个方面 ...
- 果园机器人反思稿_语文《果园机器人》教学反思
语文<果园机器人>教学反思 身为一名人民教师,课堂教学是重要的任务之一,教学的心得体会可以总结在教学反思中,怎样写教学反思才更能起到其作用呢?以下是小编收集整理的语文<果园机器人&g ...
- c语言单片机求最小公倍数,单片机常用的14个C语言算法,要熟记在心哦!
原标题:单片机常用的14个C语言算法,要熟记在心哦! 算法(Algorithm):计算机解题的基本思想方法和步骤. 算法的描述:是对要解决一个问题或要完成一项任务所采取的方法和步骤的描述,包括需要什么 ...
- 易语言html规则分析,易语言算法原理浅析【一】(示例代码)
注: 如果你看完了下面的文章.就来试试这个KeyGenMe吧,相信你能有所收获. 一.文章开头首先我们要贴上一段易语言代码,并且编译这段代码,从汇编角度分析易语言程序编译后,易语言算法在汇编中的实现过 ...
- c语言约瑟夫环问题,C++_详解约瑟夫环问题及其相关的C语言算法实现,约瑟夫环问题
N个人围成一圈 - phpStudy...
详解约瑟夫环问题及其相关的C语言算法实现 约瑟夫环问题 N个人围成一圈顺序编号,从1号开始按1.2.3......顺序报数,报p者退出圈外,其余的人再从1.2.3开始报数,报p的人再退出圈外,以此类推 ...
- 编写一个字节数的rtu C语言校验程序,Modbus通信协议中CRC校验的快速C语言算法
Modbus通信协议中CRC校验的快速C语言算法 2004年第11期 福 建 电 脑 63 Modbus通信协议中CRC校验的快速C语言算法 孟开元 (西安石油大学计算机学院陕西西安710065) [ ...
- c语言编常见算法,5个常见C语言算法
5个常见C语言算法 十进制转换为二进制的递归程序 字符串逆置的递归程序 整数数位反序,例如12345->54321 四舍五入程序(考虑正负数) 二分法查找的递归函数 #include #incl ...
- 算法与数据结构c语言版PPT,C语言算法与数据结构.ppt
C语言算法与数据结构.ppt 第十二章 算法与数据结构12.1 算法的基本概念,该节知识点所占试题比重为12,属于重点考查对象,基本上每次必考,主要考查算法的定义和对算法复杂度的理解.历次试题分值在0 ...
最新文章
- C 语言 结构体_finddata_t _findfirst, _findnext, _findclose 函数讲解
- 就是这么霸道,使用OpenCV10行代码实现人脸检测
- 使用匿名函数和内嵌函数处理多变量传递问题
- 关于mybatis里面的Executor--转载
- ZOJ 2588 Burning Bridges 割边
- python集合例题_python练习题集合-2
- 嵌入式软件架构设计分层思路
- python、java大作战,python测试dubbo接口
- python typing typescript_typescript
- 多个ORACLE HOME时的程序连接
- Volatile的实现原理(看这篇就够了)
- asp.net读写XML小结
- 红帽linux安装wordpress,linux Centos怎么安装wordpress
- 大数据时代已经来临,正在改变我们的生活
- 电脑上装WPS好还是office好【图解】
- Lower power design UPF 学习
- POJ 3580 SuperMemo(伸展树的几个基本操作)
- iphone13 Pro的运行内存是6gb
- adb shell input keyevent 模拟按键事件
- 问题描述-缺少关键字KeyError Traceback (most recent call last) <ipython-input
热门文章
- Python爬虫:抓取多级页面数据
- 【uni-app】基础
- [培训-无线通信基础-10]:正交频分复用(OFDM、符号间多径干扰)
- ESXI8.0一键安装黑群晖DSM7
- java 文件删除不了File类的delete方法删不掉文件的原因分析
- 数值分析学习(一)之交叉法(Bracketing Methods)求根
- 计算机上静音快捷键是什么,电脑静音快捷键是什么(如何设置电脑一键静音?)...
- GitLab合并请求时出现 Validate branchesCannot Create: This merge request already existed
- 学习云计算技术前景在哪里?云计算技术发展趋势
- 龙蜥降世,神龙升级,灵杰亮相,阿里云再出神器