首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >字典中的排列

字典中的排列
EN

Stack Overflow用户
提问于 2014-12-15 01:42:06
回答 1查看 302关注 0票数 0

我试图计算不同地点之间的距离,并找到最小的一个。我想以排列的形式来做,但是我很难找到这些排列。

你可能会问,为什么要这样做?实际上,这只是我正在做的一个更大的项目的一部分,我实际上必须制作一个哈密尔顿图,但我读到过寻找排列是获得它的唯一方法。我将修改我的置换查找代码,将其与生成树的长度进行比较(当然,生成树是由相同的节点组成的)。

可能有一件事,我遇到这个问题的原因是,我已经试着解决这个问题好几天了,我终于成功地创建了一棵生成树,我的注意力集中在改变这棵树上,我只是希望有人用新的思维来看一看。

代码语言:javascript
复制
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比较它时,它将不会再次出现。

我尝试过不同的方法,但我现在已经卡住了很多次,如果有人能给我很好的建议,我会非常感激的。

谢谢你的考虑。

EN

回答 1

Stack Overflow用户

发布于 2014-12-15 01:47:31

代码语言:javascript
复制
from itertools import combinations
for i in combinations(range(1,50), 6):
    print (i)

代码语言:javascript
复制
for i in permutations(range(1,50),6):
    print (i)

选择你需要的,非重复的组合。

示例:

代码语言:javascript
复制
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)

输出:

代码语言:javascript
复制
>>> 
(('Valga', 0), ('Tõrva', 30), ('Tartu', 80))
(('Valga', 0), ('Tõrva', 30), ('Elva', 60))
(('Valga', 0), ('Tartu', 80), ('Elva', 60))
>>> 

Dicts元素是混合的,而不是有序的。所以我把它们放在一个你可以看到的有序列表中。

如果您想要使用排列,请将组合更改为带有排列的permutations.Output:

代码语言:javascript
复制
>>> 
(('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))
>>> 
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27472088

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档