python 凸多边形的最优三角剖分

'''
凸多边形最优三角剖分

'''
# 权值函数,返回三角形的权值
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

详细解释见https://blog.csdn.net/pi9nc/article/details/9750091?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522163057514916780255243688%2522%252C%2522scm%2522%253A%252220140713.130102334..%2522%257D&request_id=163057514916780255243688&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~all~sobaiduend~default-2-9750091.pc_search_insert_download&utm_term=%E5%87%B8%E5%A4%9A%E8%BE%B9%E5%BD%A2%E7%9A%84%E6%9C%80%E4%BC%98%E4%B8%89%E8%A7%92%E5%89%96%E5%88%86&spm=1018.2226.3001.4187

这位大神的,嘿嘿,我太懒了

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值