我想讓用戶手動輸入圖形,而不是在代碼中使用它'預先存在',用於我的Dijkstra算法。使用嵌套字典來存儲用戶定義的圖
我已經做到了這一點,但希望對其實現和用戶友好性提供一些反饋意見。此外,還有一種將圖形輸入嵌套字典的更有效方法嗎?如果是這樣怎麼樣?
大約代碼要點
- 數據必須使用嵌套的字典
- 環路將被存儲在零例如BB的0不留爲空白,但是這僅在一個循環中存在的用戶圖形發生否則忽略。
- 理想我不希望使用現有的庫裏面什麼編碼它自己之前更好地瞭解發生了什麼
千恩萬謝。 編輯:不再需要重複需求。
{'A': {'C': 1, 'B': 5}, 'D': {}, 'B': {'D': 2}, 'C': {'D': 9}}
^節點的期望輸出也是當前輸出。
nodes = {}
def add_node():
entered_graph = False
while not entered_graph:
source_node = input("Enter a source node: ")
num_neighbours = int(input("Enter how many neighbours this node has"
"including previously entered nodes: "))
nodes[source_node] = {}
for neighbour in range(num_neighbours):
neighbour = input("Enter neighbor node: ")
distance = int(input("Enter distance from source node to this neighbor node: "))
nodes[source_node][neighbour] = distance
end_loop = input("Enter y to finish graph entry: ")
end_loop = end_loop.lower()
if end_loop == "y":
entered_graph = True
add_node()
print(nodes)
「數據必須使用嵌套字典存儲」爲什麼?我將創建一個元組作爲關鍵字'(from_location_id,to_location_id)'的字典。 – roganjosh
特別是如果你說這是一個對稱圖,例如a - > b == b - > a。那麼你只需要存儲這些對中的一個並測試兩者即(a,b)或(b,a)。就內存方面的重大問題而言,這將非常重要。以單一位置爲嵌套的嵌套字典會導致大量重複,這是不必要的。 – roganjosh
事實上,我已經在我的算法中糾正了這個問題,所以現在不需要兩次添加每個弧。 – Padwas