我正在尝试编写 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. 当我们完成考虑当前节点的所有邻居时,将其标记为已访问。已访问的节点不会再次被检查;现在记录的距离是最终和最小的。
我认为我走在正确的轨道上,只是卡在如何表达“从一个节点开始,获取从源到节点的长度,如果长度更短,则覆盖以前的值,然后移动到下一个节点”的部分。