'''
凸多边形最优三角剖分
'''
# 权值函数,返回三角形的权值
def w(a, b, c):
global weight
return weight[a][b]+weight[b][c]+weight[a][c]
#计算最优值
def MinWeightTriangulation(n, t, s):
for r in range(2, n+1):
for i in range(1, n-r+2):
j = i+r-1
t[i][j] = t[i+1][j] + w(i-1, i, j)
s[i][j] = i
for k in range(i+1, j):
u = t[i][k] + t[k+1][j] + w(i-1, k, j)
if u < t[i][j]:
t[i][j] = u
s[i][j] = k
#打印最优剖分
def Traceback(s, i, j):
if i == j:
return
Traceback(s, i, s[i][j])
Traceback(s, s[i][j]+1, j)
print('v%d,v%d,v%d' %(i-1, j, s[i][j]))
print("输入顶点数")
n = int(input())
global weight
weight = []
t = []
s = []
print('请输入权函数')
for i in range(n):
weight.append(input().split())
weight[i] = [int(x) for x in weight[i]]
for i in range(n+1):
# weight.append([])
t.append([])
s.append([])
for j in range(n+1):
t[i].append(0)
s[i].append(0)
MinWeightTriangulation(n-1, t, s)
Traceback(s, 1, n-1)
测试样例:
输入顶点数
4
请输入权函数
0 4 5 3
4 0 3 5
5 3 0 4
3 5 4 0
v1,v3,v2
v0,v3,v1
这位大神的,嘿嘿,我太懒了