使用字典的最短路径算法[Python]

时间:2015-05-01 18:20:37

标签: python algorithm dictionary dijkstra

这是我的第一个问题,实际上是我第一次尝试这个问题但是我读了问题的规则,我希望我的问题符合所有问题。

我有一个针对我的算法主题的项目,它是为dijkstra最短路径algorthim设计一个gui。我之所以选择使用python是因为它是一种我想掌握的语言。我实际上已经尝试了一个多星期,而且我一直面临着麻烦。但无论如何这很好玩:)!

我选择以这种方式将我的有向图表示为字典:

 g= {'A': {"B": 20, 'D': 80, 'G' :90}, # A can direct to B, D and G
'B': {'F' : 10},
'F':{'C':10,'D':40},
'C':{'D':10,'H':20,'F':50},
'D':{'G':20},
'G':{'A':20},
'E':{'G':30,'B':50},
'H':None}  # H is not directed to anything, but can accessed through C

所以键是顶点,值是链接的vetrices和权重。这是图表的一个例子,但我打算要求用户输入他们自己的图表细节并检查每两个节点之间的最短路径[start - >然而,问题是,我甚至不知道如何访问内部字典,因此我可以处理内部参数,我尝试了很多方法,如下那两个:

for i in g:
    counter = 0
    print g[i[counter]]     # One
    print g.get(i[counter]) # Two

但两者都给了我相同的输出:(注意我无法真正访问并使用内部参数)

{"B": 20, 'D': 80, 'G' :90}
{'F' : 10}
{'C':10,'D':40}
{'D':10,'H':20,'F':50}
{'G':20}
{'A':20}
{'G':30,'B':50}
None

所以我的问题是,请你帮我解决如何访问内部词典,以便我可以开始研究算法本身。非常感谢,并感谢阅读。

2 个答案:

答案 0 :(得分:6)

这实际上并不那么难,一旦你看到它就应该完全有道理。我们带你的g。我们希望从'B'节点获得'A'连接的权重:

>>> d = g['A']
>>> d
{"B": 20, 'D': 80, 'G' :90}
>>> d['B']
20
>>> g['A']['B']
20

使用g['A']获取字典g中密钥的值。我们可以通过引用'B'密钥直接对此值执行操作。

答案 1 :(得分:1)

我猜这些会给你一些想法:

for dict in g:
     print dict.get("B","")

for dict in g:
     print dict.keys() #or dict.values()

for dict in g:
     print dict["B"]