簡體   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