凸多边形的三角形划分

Icee_sun 2008-03-28 12:59:07
Catalan数的一个应用,在一个n个顶点的凸多边形中,插入对角线(对角线两两不相交)将多边形划分为三角形,求划分算法。
算法要求是:
输入:凸多边形的顶点数n
输出:每种划分生成的三角形的顶点组合。
我原来用二分法做,但是这样是是一种划分,老师要求是所有划分序列的输出,不知道该怎么做了。大家帮帮忙啊!
...全文
1505 点赞 收藏 9
写回复
9 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
Kvci 2008-04-02
这样的方法不知道行不行:
先构造一个足够大的三角形(所有点都在这个三角形内),再逐个点加进去,如果新增点在原来的任何一个三角形内,那所在的那个三角形拆成3个三角形
所有点加完之后,删除构造的三个点
回复
xax100000 2008-04-02
经典的动态规划
回复
kekedou 2008-04-01
貌似是曾经NOI的竞赛题。。。。。。。。
偶就是用楼上的方法做的,每一个点轮流作为基点。。。。。。
回复
在一个n个顶点的凸多边形中,插入对角线(对角线两两不相交)将多边形划分为三角形。
总共需要n-3条弦,将多边形切成n-2个小三角形。

设凸多边形n个顶点顺序为p[1],p[2],……,p[n],
它有n条边:<p[1]p[2]>,<p[2]p[3]>,……,<p[n-1]p[n]>,<p[n]p[1]>。
按顶点编号顺序,将其中的n-1条边写成下面这个序列:
<p[1]p[2]><p[2]p[3]><p[3]p[4]>……<p[n-1]p[n]>,
则多边形的三角划分和这个序列的全括号化存在着一一对应的关系。
以五边形为例:


选定多边形的一条边<p[1]p[n]>为基边,无论怎样分区域,基边总能在分成的三角形区域中的一个中。
该三角形区域又将凸多边形区域分成三个部分


令函数f(n)来表示n+1个顶点的多边形划分出的小三角数量,并规定f(1)=1,
根据划分点的选取过程可以看出,递推关系满足下列式子
f(n)=f(1)*f(n-1)+f(2)*f(n-2)+……+f(n-1)*f(1),这里n>=2
用递归的法子模拟上述过程,就能够输出全部的划分。
回复
hl_md_wj 2008-03-31
这个问题是动态规划法的经典例题,讲动态规划的一般都会讲到这个问题,很容易找的
回复
1连3,3连5........
回复
hoohag 2008-03-29
晕...楼上的啊楼上的....把组合数学里面的东西搬出来了. 楼主去看看机械工业的组合数学, 就什么都解决了
回复
medie2005 2008-03-28
当然,用简单的递归就可以解决,
递归式: T(n)=∑(1≤k≤n-1)T(k)*T(n-k).
其实你们老师估计也是要你们用递归的方法做的.
回复
medie2005 2008-03-28
lz的意思是求所有划分序列?
如果是这样,可以提供一个解题思路:
题目中已经提示:Catalan数与凸多边形的三角形划分有紧密联系.
因此,Catalan 0-1序列与凸多边形的三角形划分序列也有紧密联系.
我们如果知道两点:
1):如何生成所有含n个1和n个0的Catalan 0-1序列;
2):每个Catalan 0-1序列与三角形划分序列的转化关系.
我们就可以生成所有的三角形划分序列.

问题1在我blog中<词典序法生成出栈序列>一文中有,可以参考:
http://blog.csdn.net/medie2005/archive/2007/12/19/1954361.aspx

至于问题2,得看你的划分序列如何定义的,这样才好找对应关系.
这个工作应当不难,lz自己应能完成.
回复
相关推荐
发帖
数据结构与算法
创建于2007-08-27

3.2w+

社区成员

数据结构与算法相关内容讨论专区
申请成为版主
帖子事件
创建了帖子
2008-03-28 12:59
社区公告
暂无公告