ダイクストラのアルゴリズムを書こうとしていますが、コードで特定のことを「言う」方法に苦労しています。視覚化するために、配列を使用して表現したい列を次に示します。
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 を上書きします。訪問したノードは二度とチェックされません。現在記録されているその距離は最終的で最小限です
私は正しい軌道に乗っていると思います。「ノードから開始し、ソースからノードまでの長さを取得し、長さが小さい場合は前の値を上書きしてから、次のノードに移動する」という言い方に固執しています