我有很多元素,比方说[a, b, c, d]
,对于每个成对组合我都有一个分数:
[['d-a', 0], ['a-b', 0], ['b-a', 0],
['a-c', 2], ['c-a', 0], ['a-d', 2],
['d-b', 1], ['b-c', 2], ['c-b', 0],
['b-d', 2], ['d-c', 2], ['c-d', 2]]
我正在寻找一种Python方法,将这些元素按顺序排列,以最小化这些分数的总和。每个单元必须只出现一次。请注意,两个元素的连续性也很重要,即'd-a' = 0
而'a-d' = 2
。
我会非常感谢你的回答。
谢谢
西蒙
答案 0 :(得分:0)
elements = ['a', 'b', 'c', 'd']
scores = [['d-a', 0], ['a-b', 0], ['b-a', 0], ['a-c', 2], ['c-a', 0], ['a-d', 2],
['d-b', 1], ['b-c', 2], ['c-b', 0], ['b-d', 2], ['d-c', 2], ['c-d', 2]]
s = dict(scores)
print(min(itertools.permutations(elements),
key=lambda p: sum(s[a+'-'+b] for a, b in zip(p, p[1:]))))
打印('c', 'a', 'b', 'd')
。