繁体   English   中英

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

[英]Shortest path algorithm using dictionaries [Python]

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

我有一个针对我的算法主题的项目,它是为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和权重。 这是一个图形的例子,但我打算要求用户输入他们自己的图形细节并检查每个节点之间的最短路径[开始 - >结束]然而问题是我甚至不知道如何访问内部字典所以我可以处理内部参数,我尝试了很多这样的方法:

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

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

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

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

使用g['A']获取字典g键的值。 我们可以通过引用'B'键直接对此值起作用。

使用for循环将迭代字典的键,并通过使用键,您可以获取与键关联的值。 如果值本身是字典,则可以使用另一个循环。

for fromNode in g:
    neighbors = g[fromNode]
    for toNode in neighbors:
        distance = neighbors[toNode]
        print("%s -> %s (%d)" % (fromNode, toNode, distance))

请注意,要使其正常工作,当没有邻居时,应使用空字典{}而不是None

我想这些可以给你一些想法:

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"]

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM