我正在嘗試寫Dijkstra的算法,但是我正在努力如何在代碼中「說」某些事情。 爲了形象化,這裏有我想要使用數組所代表的列:Python Dijkstra算法
max_nodes
A B C Length Predecessor Visited/Unvisited
A 0 1 2 -1 U
B 1 0 1 -1 U
C 2 1 0 -1 U
所以,會有好幾個陣列,在下面我的代碼所示:
def dijkstra (graph, start, end)
network[max_nodes][max_nodes]
state [max_nodes][length]
state2 [max_nodes][predecessor]
state3 [max_nodes][visited]
initialNode = 0
for nodes in graph:
D[max_nodes][length] = -1
P[max_nodes][predecessor] = ""
V[max_nodes][visited] = false
for l in graph:
length = lengthFromSource[node] + graph[node][l]
if length < lengthFromSourceNode[w]:
state[l][length] = x
state2[l][predecessor]
state3[l][visited] = true
x +=1
粗體部分是我我試圖實現算法的這一部分:
3.對於當前節點,考慮它的所有未訪問的鄰居並計算它們的暫定距離。例如,如果當前節點(A)的距離爲6,並且與另一個節點(B)連接的邊的長度爲2,則通過A到B的距離爲6 + 2 = 8。如果此距離小於先前記錄的距離,則覆蓋距離
4.當我們完成考慮當前節點的所有鄰居時,將其標記爲已訪問。被訪問的節點將不會再次被檢查;它記錄的距離現在是最終的和最小的
我想我是在正確的軌道上,我只是被困在如何說'在一個節點開始,從源節點獲取長度,如果長度較小,覆蓋以前的值,然後移動到下一個節點
「粗體部分」?大膽的部分是什麼? – 2011-02-14 22:17:05
啊,是的,抱歉;從'圖中的l'向下的代碼 – user612041 2011-02-14 22:28:59
您的代碼根本沒有多少意義。縮進非常隨意,並且有很多未定義的變量。當你編程從簡單的工作開始,並從那裏擴展。 – 2011-02-14 23:32:36