7-3 凸多边形最优三角剖分 (10 分)(思路+详解+分析题意+动态规划)Come Baby!!!!!!!!!

这篇具有很好参考价值的文章主要介绍了7-3 凸多边形最优三角剖分 (10 分)(思路+详解+分析题意+动态规划)Come Baby!!!!!!!!!。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

一:题目:

给定n边凸多边形P,要求确定该凸多边形的三角剖分(将多边形分割成n-2个三角形),使得该三角剖分中诸三角形上权之和为最小。各边弦的权值以由输入数据给出,以无向图的形式表示。三角形的权值等于三条边权值相加。
7-3 凸多边形最优三角剖分 (10 分)(思路+详解+分析题意+动态规划)Come Baby!!!!!!!!!
输入格式:
第一行输入凸多边形的边数n(3<=n<=8)

第二行起,输入顶点i(1<=i<=n)到顶点j(i<=j<=n)组成的边或弦的权值

输出格式:
最优三角剖分中诸三角形上权值和。

输入样例:

6
0 2 2 3 1 4
0 1 5 2 3
0 2 1 4
0 6 2
0 1
0

输出样例:

24

二:分析题意:

有没有兄弟搞不清题目当中 使得该三角剖分中诸三角形上权之和为最小这句话,反正我是读了几十遍,没读懂
后来看了一篇博客,上面给解释了,这个也就是当将凸多变形剖分完成后,求取所有三角形的周长和使其最小

三:思路:

1.凸多边形的三角剖分是将凸多边形分割成互不相交的三角
形的弦的集合。
2.最优三角剖分中诸三角形上权值和:指的是将多边形划分成多个三角形
其所有的三角形的周长和最小
3.和矩阵连相乘的思路比较:凸三角形的剖分是通过一个三角形将多边形划分成不同的两部分和一个三角形。
联想矩阵链的递推方程:将其划分成两个不同的子链+这两个自链所构成的矩阵乘法次数

相同点:两种思路一致,
不同点:矩阵连计算次数是 pi-1 * pK* pj
多变形是 三边之和

4.关于递推方程:t[i][j] = t[i][k] + t[k+1][j] + w(i-1,k,j);
这里需要说明的是t[i][j]即表示的是多边形的剖分最小权值和(所有三角形的)
比如t[1][6] = t[1][1] + t[2][6] + w(0,1,6), (7个顶点)
通过点0,1,6将多边形剖分成三部分
其中t[1][1] = 0(三角剖分中 只有一条边的是不可以 被剖分成 多边形的 故其权值和为0)
t[2][6] 表示的是剩下的多变形,然后再求取它的最小值

通过这样的分析:我们可以得知 t[2][6],也就相当于矩阵连相乘问题中的
子链,那么我就还是可以通过建网格来存储每个多边形的最小权值和
来进行求解
5.本题题解:
通过上述分析我们可以得出:
求取凸多边形最优三角剖分 = t[1][n - 1];
6:这里有一张图是 将 矩阵链中的矩阵映射在凸多变形的边上,方便兄弟们更容易理解算法
7-3 凸多边形最优三角剖分 (10 分)(思路+详解+分析题意+动态规划)Come Baby!!!!!!!!!

四:上码:

/**
	分析: 
	1.凸多边形的三角剖分是将凸多边形分割成互不相交的三角
	  形的弦的集合。
	2.最优三角剖分中诸三角形上权值和:指的是将多边形划分成多个三角形
	                                  其所有的三角形的周长和最小
	3.和矩阵连相乘的思路比较:凸三角形的剖分是通过一个三角形将多边形划分成不同的两部分
							和一个三角形。
		联想矩阵链的递推方程:将其划分成两个不同的子链+这两个自链所构成的矩阵乘法次数
		
		相同点:两种思路一致,
		 不同点:矩阵连计算次数是 pi-1 * pK* pj 
				 多变形是 三边之和	
				 
	4.关于递推方程:t[i][j] = t[i][k] + t[k+1][j] + w(i-1,k,j);
	   这里需要说明的是t[i][j]即表示的是多边形的剖分最小权值和(所有三角形的)
	   比如t[1][6] = t[1][1] + t[2][6] + w(0,1,6),
	   通过点0,1,6将多边形剖分成三部分
	   其中t[1][1] = 0(三角剖分中 只有一条边的是不可以 被剖分成  多边形的 故其权值和为0)
	       t[2][6] 表示的是剩下的多变形,然后再求取它的最小值
	  
	  通过这样的分析:我们可以得知 t[2][6],也就相当于矩阵连相乘问题中的
	  				  子链,那么我就还是可以通过建网格来存储每个多边形的最小权值和
					  来进行求解
	5.本题题解:
	   通过上述分析我们可以得出: 
	  求取凸多边形最优三角剖分 = t[1][n]; 
	 				  			   						  
*/ 

#include<bits/stdc++.h>
using namespace std;

int array1[200][200];

//剖分三角形的周长 
int C_triangle(int i,int k,int j){
	return array1[i][k] + array1[k][j] + array1[i][j];
} 

int main(){
	
	int N;
	cin >> N;
	int m[200][200];
	
	//比如有7个顶点(v0,v1..v6),我们数组中存的是边长和弦长 
	for(int i = 0; i < N; i++){
		for(int j  = i; j < N; j++){
			cin >> array1[i][j];
		}
	}
	
//	for(int i = 1; i <= N; i++){
//		for(int j  = 1; j <= N; j++){
//			cout <<  array[i][j] << ' ';
//		}
//		cout << endl;
//	}
	
	for(int i = 0; i <= N; i++){
		m[i][i] = 0;
	}
		
	//开始划分网格和更新
     	
	for(int i = N - 1; i >= 1; i--){
		for(int j = i+1; j <= N - 1; j++){//这里j从i+1开始,因为从i开始每次m[i][i] = 0; 这里j <= N 表示的是这一行到最后比如m[i][N] 
		
			//初始化二维数组 
			m[i][j] = m[i][i] + m[i+1][j] + C_triangle(i-1,i,j);
			
			for(int k = i+1; k < j; k++){
				int temp = m[i][k] + m[k+1][j] + C_triangle(i-1,k,j);
				
				if(temp < m[i][j]){
					 m[i][j] = temp;
				} 
			} 
		}
	} 
	
	
//	for(int i = 1; i < N; i++){
//		for(int j = 1; j < N; j++){
//			cout << m[i][j] << ' ';
//		}
//		cout << endl; 
//	}
	
//	cout << C_triangle(4,5,6); 
	
	cout << m[1][N-1];
	
} 

7-3 凸多边形最优三角剖分 (10 分)(思路+详解+分析题意+动态规划)Come Baby!!!!!!!!!
加油陌生人!我们共勉!如有疑问请留言!文章来源地址https://www.toymoban.com/news/detail-412230.html

到了这里,关于7-3 凸多边形最优三角剖分 (10 分)(思路+详解+分析题意+动态规划)Come Baby!!!!!!!!!的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【LeetCode每日一题: 1039. 多边形三角剖分的最低得分 | 暴力递归=>记忆化搜索=>动态规划 | 区间dp 】

    🍎作者简介:硕风和炜,CSDN-Java领域新星创作者🏆,保研|国家奖学金|高中学习JAVA|大学完善JAVA开发技术栈|面试刷题|面经八股文|经验分享|好用的网站工具分享💎💎💎 🍎座右铭:人生如棋,我愿为卒,行动虽慢,可谁曾见我后退一步?🎯🎯🎯 1039. 多边形三角剖分的最

    2023年04月19日
    浏览(42)
  • opencv 之 外接多边形(矩形、圆、三角形、椭圆、多边形)使用详解

    本文主要讲述opencv中的外接多边形的使用: 多边形近似 外接矩形、最小外接矩形 最小外接圆 外接三角形 椭圆拟合 凸包 将重点讲述最小外接矩形的使用 给一个opencv官方的例程: 过程图像如下: 椭圆拟合一般用于轮廓提取之后: 凸包绘制 计算两个旋转矩形交集: C++版的最

    2024年02月09日
    浏览(50)
  • [游戏开发]Unity多边形分割为三角形_耳切法

    有个小需求是分割一下多边形,顺带记录一下。通常来说多边形的形状都比较复杂,不好进行操作,这个时候如果我们可以把一个多边形分隔为若干个三角形,回归到简单基础的形状就方便我们操作。三角形化在渲染显示中还是挺多用的。下文未列出,但涉及到的代码链接如

    2024年02月10日
    浏览(29)
  • [游戏开发]Unity中随机位置_在圆/椭圆/三角形/多边形/内随机一个点

    在做游戏的时候经常需要随机某一个点,而且形状各种各样,每次要随机的时候就容易忘记怎么弄了。这里总结一下各种常见形状内基础随机方式。 略~ 圆形随机一般有两种。一种是通过极坐标来随机,另一种是先正常随机矩形在判断点是否在圆形内。第二种其实使用的范围

    2024年02月12日
    浏览(36)
  • python 如何判断点是否在多边形(三角形)内,或求点在3D面上的投影?

    方法1: 用shapely中的geometry包 1)polygon.covers(point) 如果point在多边形polygon上(包括边),返回True,否则False。 2)polygon.contains(point) 如果point在多边形polygon上(不包括边),返回True,否则False。 方法2: 用blender的内置python api。 将点投影到三角形平面上,并检查其是否在三角形

    2023年04月09日
    浏览(33)
  • OpenCV(10): 轮廓近似—多边形拟合,边界矩形与边界圆形

    轮廓近似(Contour Approximation)是指对轮廓进行逼近或拟合,得到近似的轮廓。在图像处理中,轮廓表示了图像中物体的边界,因此轮廓近似可以用来描述和识别物体的形状。 多边形拟合(Approximating Polygons)是将轮廓逼近成一个由直线段构成的多边形。常见的有最小包围矩形

    2024年02月10日
    浏览(31)
  • 计算几何——三角剖分(Triangulation)

    本节主要讲解了如何将二维多边形划分为多个不相交的三角形。         考虑如下场景,在一个尺寸为多边形的画廊中放置摄像头(哨兵),需要放几个才能完全覆盖该场景?可以看到下图至少需要两个哨兵。         如下图,若多边形是凸多边形或星形多边形,那么只

    2023年04月09日
    浏览(28)
  • PCL 耳切三角剖分算法

      简单多边形的耳朵,是指由连续顶点 V 0 V_0 V

    2024年02月10日
    浏览(30)
  • 如何判断两个多边形是否相交?——多边形相交判定算法详解

    如何判断两个多边形是否相交?——多边形相交判定算法详解 在计算机图形学中,判断两个多边形是否相交是一项很重要的任务。这涉及到各种应用场景,如碰撞检测、模拟物理效果等。在本篇文章中,我们将会介绍多边形相交判定算法的相关知识和实现方式。 首先,我们

    2024年02月14日
    浏览(36)
  • delaunay和voronoi图 人脸三角剖分

    先获取人脸68个特征点坐标,其中使用了官方的预训练模型shape_predictor_68_face_landmarks.dat: 实现人脸三角剖分:

    2024年02月05日
    浏览(25)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包