字典中的排列

2024-05-14 17:28:26 发布

您现在位置:Python中文网/ 问答频道 /正文

我试着计算不同地方之间的距离,找出最小值。我想做一个排列,但我有困难找到这些排列。在

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

可能有一件事,我遇到这个问题的原因是,我已经尝试解决它好几天了,我终于成功地创建了一棵生成树,而我正专注于改变这棵树,我只希望有人能以一种全新的思维来看待它。在

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}

我们从爱沙尼亚的小城市瓦尔加开始。我们可以从那里搬到塔尔瓦,艾尔瓦和塔尔图。如果我们搬到塔瓦,我们还有两个选择——搬到埃尔瓦或塔尔图。假设我们选择搬到艾尔瓦。现在我们只有一个选择了,我们去塔尔图。我们旅行的长度是30+40+20=90。现在,我认为递归是这里最好的选择,程序返回到Elva,我们从那里搬到了Tartu,也没有更多的城市可以访问,现在我们回到了Tõrva。在这里,我们之前选择了搬家艾尔瓦,现在我们搬到塔尔图,从那里只剩下一次访问,那就是艾尔瓦,现在的行程是:30+60+20=110。在

所以我们的第一次旅行是:Valga-Tõrva-Tartu=90,第二次是:Valga-Tõrva Tartu Elva,它是110。在

现在递归实际上又回到了Valga,因为Tõrva已经没有更多的城市可以访问了。从瓦尔加我们现在可以访问艾尔瓦和塔尔图,然后继续。。我知道这可以想象成一棵树。在

我有递归的想法,使用visited作为一个数组来存放元素。例如,如果我们从Valga开始,Valga在visited中被选中,稍后当我们从Tõrva比较它时,它将不再被看到。在

我尝试过不同的方法,但我已经陷入困境很多次,如果有人能给我很好的建议,我真的很感激。在

谢谢你的考虑。在


Tags: the项目方法代码距离节点is地方
1条回答
网友
1楼 · 发布于 2024-05-14 17:28:26
from itertools import combinations
for i in combinations(range(1,50), 6):
    print (i)

or

^{pr2}$

选择您需要哪一个,组合表示不重复。在

示例:

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元素是混合的,不是有序的。所以我把它们列在一个你可以看到的有序的列表中。在

If you want permutations, change combinations as permutations.Output with permutations:

>>> 
(('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))
>>> 

相关问题 更多 >

    热门问题