/*
name:
author: 巧若拙
date: 27-03-17 10:11
description: 動態規劃--凸多邊形最優三角剖分
題目描述:
用多邊形頂點的逆時針序列表示凸多邊形,即p=表示具有n條邊的凸多邊形。
給定凸多邊形p,以及定義在由多邊形的邊和弦組成的三角形上的權函式w。要求確定該凸多邊形的三角剖分,
使得即該三角剖分中諸三角形上權之和為最小。
解題思路:
若凸(n+1)邊形p=的最優三角剖分t包含三角形v0vkvn,1≤k≤n-1,則t的權為3個部分權的和:
三角形v0vkvn的權,子多邊形和的權之和。
可以斷言,由t所確定的這2個子多邊形的三角剖分也是最優的。
因為若有或的更小權的三角剖分將導致t不是最優三角剖分的矛盾。
那麼我們定義乙個m[i][j],0<=i<=j1時,凸子多邊形至少有3個頂點。
由最優子結構性質,m[i][j]的值應為m[i][k]的值加上m[k][j]的值,再加上三角形vivkvj的權值,其中iusing namespace std;
int minweighttriangulation(int i, int j);//自頂向下,使用備忘錄陣列的動態規劃演算法
int minweighttriangulation_2(int n);//自底向上的動態規劃演算法
int getweight(int i, int k, int j);//計算三角形的周長
void printtriangulation(int i, int j); //輸出組成最優解的各個三角形的周長
const int n = 6;
int w[n][n] = ,,,
,,
};//圖的鄰接矩陣
int m[n][n]; //m[i][j]表示多邊形的最優權值
int s[n][n]; //s[i][j]記錄vi-1到vj最優三角剖分的中間點k
int main(int argc, char **argv)
int minweighttriangulation(int i, int j)//自頂向下,使用備忘錄陣列的動態規劃演算法
具有權值為0,那我們在考慮最優解時,就不需要從頂點v0開始,而是從頂點v1開始,這樣要計算的凸(n+1)邊形p的最優權值為m[1][n]。
需要注意的是,我們在求m[i][j]的時候,是取頂點vi-1為起點的,所以計算三角形的權之和(周長)時,我們計算的是getweight(i-1, k, j)。這和演算法1是不一樣的。
總的來說,演算法1直觀,演算法2 簡潔。
#includeusing namespace std;
int minweighttriangulation(int i, int j);//自頂向下,使用備忘錄陣列的動態規劃演算法
int minweighttriangulation_2(int n);//自底向上的動態規劃演算法
int getweight(int i, int k, int j);//計算三角形的周長
void printtriangulation(int i, int j); //輸出組成最優解的各個三角形的周長
const int n = 6;
int w[n][n] = ,,,
,,
};//圖的鄰接矩陣
int m[n][n]; //m[i][j]表示多邊形的最優權值
int s[n][n]; //s[i][j]記錄vi-1到vj最優三角剖分的中間點k
int main(int argc, char **argv)
int minweighttriangulation(int i, int j)//自頂向下,使用備忘錄陣列的動態規劃演算法
{ if (m[i][j] != 0) //預設為0
return m[i][j];
if (i == j)
return 0;
//先處理k=i的情形,注意我們取頂點vi-1為起點
m[i][j] = minweighttriangulation(i+1, j) + getweight(i-1, i, j); //minweighttriangulation(i, i)==0,就不寫了
s[i][j] = i;
//再處理i
凸多邊形最優三角剖分
問題描述 使用動態規劃演算法解凸多邊形最優三角剖分問題,具體來說就是,依據遞迴式,按照順序求得子問題,使得該三角剖分中諸三角形上權之和為最小。輸入形式 在螢幕上輸入凸多邊形頂點個數和頂點座標。輸出形式 最優三角剖分後的三角形頂點。樣例輸入 8 26 0 20 0 10 10 0 22 12 27 2...
凸多邊形的最優三角剖分
如圖所示,用頂點的逆時針序列表示凸多邊形,即p 表示具有n條邊的凸多邊形。給定凸多邊形p,以及定義在由多邊形的邊和弦組成的三角形上的權函式w。如圖所示劃分,要求確定該凸多邊形的三角剖分,使得該三角形上的勸之和最小。解析 若凸 n 1 邊形p 的最優剖分t包含三角形v0vkvn,1 k n 1,則t的...
4 5 凸多邊形最優三角剖分
動態規劃法解凸多邊形最優三角剖分 1 凸多邊形的三角剖分 將凸多邊形分割成互不相交的三角形的弦的集合t。2 最優剖分 給定凸多邊形p,以及定義在由多邊形的邊和弦組成的三角形上的權函式w。要求確定該凸多邊形的三角剖分,使得該三角剖分中諸三角形上權之和為最小。定義乙個頂點到其他頂點的權 weights ...