我试图计算不同地点之间的距离,并找到最小的一个。我想以排列的形式来做,但是我很难找到这些排列。
你可能会问,为什么要这样做?实际上,这只是我正在做的一个更大的项目的一部分,我实际上必须制作一个哈密尔顿图,但我读到过寻找排列是获得它的唯一方法。我将修改我的置换查找代码,将其与生成树的长度进行比较(当然,生成树是由相同的节点组成的)。
可能有一件事,我遇到这个问题的原因是,我已经试着解决这个问题好几天了,我终于成功地创建了一棵生成树,我的注意力集中在改变这棵树上,我只是希望有人用新的思维来看一看。
I'll start with adding elements into dictionary. Name is the city and the value is the lenght between them.
testDict = {}
testDict['Valga'] = {'Valga':0,'Tõrva': 30, 'Elva':60,'Tartu':80}
testDict['Tõrva'] = {'Tõrva':0,'Valga': 30, 'Elva':40,'Tartu':60}
testDict['Elva'] = {'Elva':0,'Valga': 60, 'Tõrva':40,'Tartu':20}
testDict['Tartu'] = {'Tartu':0,'Valga':80,'Elva':20,'Tõrva':60}让我们从爱沙尼亚的小城瓦尔加开始。我们可以从那里搬到Tórva Elva和Tartu如果我们搬到Tórva,我们还有两个选择--搬到Elva或Tartu。假设我们选择搬到Elva。现在我们只剩下一个选择了,我们去塔尔图。我们的行程是30 + 40 + 20 = 90。现在,我认为递归是最好的选择,程序返回到Elva,我们从那里搬到塔尔图,也没有更多的城市可供访问,现在我们回到Tórva。在这里,我们之前选择了移动Elva,现在我们移动到Tartu,从那里只剩下一次访问,现在是Elva,现在的行程是: 30 + 60 + 20 = 110。
所以我们的第一次旅行是:Valga Tórva-Elva-Tartu= 90,我们的第二次旅行是:Valga Tórva-Tartu-Elva,它是110。
现在递归实际上移回了Valga,因为没有更多的城市可以从Tórva访问了。从瓦尔加出发,我们现在可以参观埃尔瓦和塔尔图,然后继续前进..我知道这可以想象成一棵树。
我有过递归实现的想法,使用visited作为数组在内部保存元素。例如,如果我们从Valga开始,Valga在访问中被选中,后来当我们从Tórva比较它时,它将不会再次出现。
我尝试过不同的方法,但我现在已经卡住了很多次,如果有人能给我很好的建议,我会非常感激的。
谢谢你的考虑。
发布于 2014-12-15 01:47:31
from itertools import combinations
for i in combinations(range(1,50), 6):
print (i)或
for i in permutations(range(1,50),6):
print (i)选择你需要的,非重复的组合。
示例:
testDict= {'Valga':0,'Tõrva': 30, 'Elva':60,'Tartu':80}
list1=[]
for i in combinations(testDict.items(),3):
for x in i:
if "Valga" in x: #Because we want combinations which is Valga:0
list1.append(i)
for i in list1:
print(i)输出:
>>>
(('Valga', 0), ('Tõrva', 30), ('Tartu', 80))
(('Valga', 0), ('Tõrva', 30), ('Elva', 60))
(('Valga', 0), ('Tartu', 80), ('Elva', 60))
>>> Dicts元素是混合的,而不是有序的。所以我把它们放在一个你可以看到的有序列表中。
如果您想要使用排列,请将组合更改为带有排列的permutations.Output:
>>>
(('Elva', 60), ('Tartu', 80), ('Valga', 0))
(('Elva', 60), ('Tõrva', 30), ('Valga', 0))
(('Elva', 60), ('Valga', 0), ('Tartu', 80))
(('Elva', 60), ('Valga', 0), ('Tõrva', 30))
(('Tartu', 80), ('Elva', 60), ('Valga', 0))
(('Tartu', 80), ('Tõrva', 30), ('Valga', 0))
(('Tartu', 80), ('Valga', 0), ('Elva', 60))
(('Tartu', 80), ('Valga', 0), ('Tõrva', 30))
(('Tõrva', 30), ('Elva', 60), ('Valga', 0))
(('Tõrva', 30), ('Tartu', 80), ('Valga', 0))
(('Tõrva', 30), ('Valga', 0), ('Elva', 60))
(('Tõrva', 30), ('Valga', 0), ('Tartu', 80))
(('Valga', 0), ('Elva', 60), ('Tartu', 80))
(('Valga', 0), ('Elva', 60), ('Tõrva', 30))
(('Valga', 0), ('Tartu', 80), ('Elva', 60))
(('Valga', 0), ('Tartu', 80), ('Tõrva', 30))
(('Valga', 0), ('Tõrva', 30), ('Elva', 60))
(('Valga', 0), ('Tõrva', 30), ('Tartu', 80))
>>> https://stackoverflow.com/questions/27472088
复制相似问题