一,凸包-----8,Graham Scan:实例

本文详细描述了一种利用S栈和T栈的算法,通过先确定极点并按角度排序,判断点是否在凸包左侧,逐个添加点形成凸包的过程,最终得到凸包1->2->6->8->1。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

这个是个一般情况

1,初始化
在这里插入图片描述
如上图所示,按照先下后左的方式,先确定第一个极点1,然后以1为顶点按照角度排序,将1和最小的角度2放入S栈,将3-8按照角度从大到小压入T栈。

2,
在这里插入图片描述
从S栈的栈顶元素2和次栈顶元素1取出,画一条线(1,2),弹出T栈顶元素3,根据toleft,发现3在线段(1,2)的左侧,符合条件,将3压入S栈顶。
3,。
在这里插入图片描述
依次类推,从S栈的栈顶元素3和次栈顶元素2取出,画一条线(2,3),弹出T栈顶元素4,根据toleft,发现4在线段(2,3)的左侧,符合条件,将4压入S栈顶
4,
在这里插入图片描述
继续,从S栈的栈顶元素4和次栈顶元素3取出,画一条线(3,4),弹出T栈顶元素5,根据toleft,发现5在线段(3,4)的右侧,不符合条件,将4从S栈顶弹出。
继续,从S栈的栈顶元素3和次栈顶元素2取出,画一条线(2,3),根据toleft,发现5在线段(2,3)的左侧,符合条件,将5压入S栈顶。
5,
在这里插入图片描述
继续,从S栈的栈顶元素5和次栈顶元素3取出,画一条线(3,5),弹出T栈顶元素6,根据toleft,发现6在线段(3,5)的右侧,不符合条件,将5从S栈顶弹出。
继续,从S栈的栈顶元素3和次栈顶元素2取出,画一条线(2,3),根据toleft,发现6在线段(2,3)的右侧,不符合条件,将3从S栈顶弹出。
继续,从S栈的栈顶元素2和次栈顶元素1取出,画一条线(1,2),根据toleft,发现6在线段(1,2)的左侧,符合条件,将6压入S栈顶。

6,在这里插入图片描述
继续,从S栈的栈顶元素6和次栈顶元素2取出,画一条线(2,6),根据toleft,发现7在线段(2,6)的左侧,符合条件,将7压入S栈顶。

7,在这里插入图片描述
继续,从S栈的栈顶元素7和次栈顶元素6取出,画一条线(6,7),根据toleft,发现8在线段(6,7)的右侧,不符合条件,将7从S栈顶弹出。
继续,从S栈的栈顶元素6和次栈顶元素2取出,画一条线(2,6),根据toleft,发现8在线段(2,6)的左侧,符合条件,将8压入S栈顶。

此时,栈T为空,结束,凸包S栈底到栈顶为1->2->6->8->1

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值