10343 划分凸多边形(必做)
时间限制:1000MS 内存限制:65535K
提交次数:0 通过次数:0
题型: 编程题 语言: C++;C
Description
问题描述:一个正凸N边形,可以用N-3条互不相交的对角线将正N边形分成N-2个三角形。 现在要求读入N边形的N(N≤20),输出不同划分方法的总数(要求解的是划分方法数,而不需要输出各种划分法)。 这里,注意: 1)顶点可编号,认为顶点皆不相同,因此不允许认为将凸N边形转置视为相同划分。 2)若输出是“No answer”,请注意大小写和无标点。 输入输出举例: 输入: N=3, 输出:1 输入: N=5, 输出:5 输入: N=2, 输出:No answer 输入: N=6, 输出:14 输入: N=8, 输出:132 例如: 当N=5时,共有5种分法。
当N=6时,对六边形的三角形所有划分,请看下图:
输入格式
N,代表正凸N边形。
输出格式
不同划分方法的总数。
输入样例
5
输出样例
5
提示
卡特兰数编辑
本词条缺少信息栏,补充相关内容使词条更完整,还能快速升级,赶紧来编辑吧!
凸多边形三角划分
分析
如果纯粹从f(4)=2,f(5)=5,f(6)=14,……,f(n)=n慢慢去归纳,恐怕很难找到问题的递推式,我们必须从一般情况出发去找规律。
因为凸多边形的任意一条边必定属于某一个三角形,所以我们以某一条边为基准,以这条边的两个顶点为起点P1和终点Pn(P即Point),将该凸多边形的顶点依序标记为P1、P2、……、Pn,再在该凸多边形中找任意一个不属于这两个点的顶点Pk(2<=k<=n-1),来构成一个三角形,用这个三角形把一个凸多边形划分成两个凸多边形,其中一个凸多边形,是由P1,P2,……,Pk构成的凸k边形(顶点数即是边数),另一个凸多边形,是由Pk,Pk+1,……,Pn构成的凸n-k+1边形。
此时,我们若把Pk视为确定一点,那么根据乘法原理,f(n)的问题就等价于——凸k多边形的划分方案数乘以凸n-k+1多边形的划分方案数,即选择Pk这个顶点的f(n)=f(k)×f(n-k+1)。而k可以选2到n-1,所以再根据加法原理,将k取不同值的划分方案相加,得到的总方案数为:f(n)=f(2)f(n-2+1)+f(3)f(n-3+1)+……+f(n-1)f(2)。看到此处,再看看卡特兰数的递推式,答案不言而喻,即为f(n)=h(n-2) (n=2,3,4,……)。
最后,令f(2)=1,f(3)=1。
此处f(2)=1和f(3)=1的具体缘由须参考详尽的“卡特兰数”,也许可从凸四边形f(4)=f(2)f(3)+ f(3)f(2)=2×f(2)f(3)倒推,四边形的划分方案不用规律推导都可以知道是2,那么2×f(2)f(3)=2,则f(2)f(3)=1,又f(2)和f(3)若存在的话一定是整数,则f(2)=1,f(3)=1。(因为我没研究过卡特兰数的由来,此处仅作刘抟羽的臆测)。
相关推荐
一个正凸N边形,可以用N-3条互不相交的对角线将正N边形分成N-2个三角形。 现在要求读入N边形的N(N≤20),输出不同划分方法的总数(要求解的是划分方法数,而不需要输出各种划分法)。
"凸多边形三角划分"是一个在计算机图形学领域中常见的问题,特别是在三维建模、游戏开发和物理模拟等场景中。这个问题的目标是将一个凸多边形分割成多个不相交的三角形,这些三角形能够无间隙地覆盖整个多边形。这种...
凸多边形的三角划分是动态规划的一个实例。 ps:输入数据还需要自己另外写过,因为我的代码里面是固定了数据的。代码不多,修改起来还是挺简单的。
在计算机图形学领域,凸多边形的最优三角划分是一个重要的问题。这个任务涉及到将一个凸多边形分割成多个不相交的三角形,同时优化某种特定的度量标准,比如最小化最大三角形面积或者减少边数。在本项目中,我们将...
均衡划分凸多边形的代码,pku2839 可以在对数时间内解决三角型与多边形相交的面积。
标题“polygonPartition:在目标 C 中将凹多边形划分为凸多边形”暗示了这是一个用C++实现的程序,其主要任务是处理凹多边形的分割问题。 首先,我们来理解一下凹多边形和凸多边形的概念。凸多边形是所有顶点都在同...
实现了求凸多边形中三角划分弦长之和最短的问题。其间可以进一步改进。
将这个凸多边形划分成 N−2个互不相交的三角形,对于每个三角形,其三个顶点的权值相乘都可得到一个权值乘积,试求所有三角形的顶点权值乘积之和至少为多少。 输入格式 第一行包含整数 N,表示顶点数量。 第二行包...
总的来说,通过Delaunay三角剖分对凸多边形进行网格划分是一种高效且广泛应用的方法,它可以生成高质量的三角形网格,为后续的图形处理和计算提供良好的基础。在实际应用中,这种技术常用于游戏开发、CAD设计、地理...
在这个Java实现中,开发者可能已经考虑了各种情况,包括处理自相交的多边形、非凸多边形以及确保填充不溢出边界。代码可能包含数据结构(如栈或队列)来存储边界的交点,并使用条件逻辑来判断像素是否应该被填充。 ...
点数据外包凸多边形三角化是一种在计算机图形学和地理信息系统中常见的几何处理技术,主要目的是将一组无序的二维点集转化为一系列互不相交的三角形,形成一个覆盖这些点的连通区域。这个过程也被称为Delaunay三角...
如果所有角度都小于180度,则该多边形为凸多边形;如果有至少一个角度大于180度,那么它是凹的。在C#中,可以通过遍历顶点列表并计算相邻边的角度来实现这个判断。 5. **向量数学**:判断多边形凹凸性通常需要用到...
凸分解是在O(n * r)时间内完成的,其中n是多边形顶点的数量,r是反射多边形顶点的数量。 安装 要安装此库,只需将ConcavePolygon.h复制到您的项目中并#include“ ConcavePolygon.h”。 用法 示例:创建凹面多边形...
凹多边形和凸多边形是根据它们的几何形状来区分的。凸多边形的任意两个点之间的连线都在多边形内部。如果存在某条线段穿过多边形内部,则该多边形为凹多边形。检测方法包括扫描线法、凸包算法(如 Graham's Scan 或...
Ear Clipping 算法首先找到多边形的“耳朵”,即相邻三边构成一个凸角的顶点,然后剪掉这个“耳朵”形成两个新的三角形,重复此过程直到所有顶点都被剪掉。而Bowyer-Watson法则适用于有洞的多边形,它从任意点开始,...
对于一个不规则多边形,可以将其划分为多个三角形,因为三角形的面积计算相对简单,即底乘高除以2。这个小工具就是基于这个思路,将多边形分割为若干个三角形,然后对每个三角形进行面积计算,最后将所有三角形的...
基于给定的平面散点数据,提出了逐层提取轮廓线,并将轮廓线之间的区域进行三角划分的新算法。实现这一算法的关键是在给定阈值的条件下逐层提取内部离散点的轮廓线,再在所提取的轮廓线间进行等比例三角划分。最后,...
### 凸字形单调多边形三角剖分算法的研究 #### 1. 引言 计算几何领域致力于处理各种途径获取的几何信息,并寻找最优的处理方式。多边形作为许多实际物体外形的一种准确描述工具,在计算上具有易于实现的特点。在...
5. **凸多边形三角化**: 使用已知的三角化算法(如扇形法则或递归划分法)将每个凸多边形三角化。 #### 算法的优点 - **易实现**: 凹角消去的三角化算法相对简单,容易理解和实现。 - **效率高**: 由于每次迭代...