我正在尝试编写 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。当我们考虑完当前节点的所有邻居后,将其标记为已访问。被访问的节点将不再被检查;它现在记录的距离是最终的和最小的
我想我在正确的轨道上,我只是坚持如何说'从一个节点开始,获取从源到节点的长度,如果长度更小,覆盖以前的值,然后移动到下一个节点