Dijkstra
Algorithm¶
def dijkstra(s0, sg, T):
OPEN.append(s0)
CLOSED.add(s0)
while not OPEN.empty():
n = OPEN.pop()
if n == sg:
return path from s0 to n
for n′ in T(n):
if n′ not in CLOSED:
OPEN.append(n′)
CLOSED.add(n′)
# if it has found better path
if n′ is in CLOSED and g(n′) < CLOSED[n′].g_value:
update g(n′) in OPEN and CLOSED
update parent of n′in CLOSED
#reconstruct entire heap
heapify OPEN
Details¶
The main function if the inner loop has two parts: - if the child wasn't in the CLOSED list (if we haven't seen it before). Then add it to the CLOSED list. - if that child has a cheaper cost than the current version in the CLOSED list, then update it to that value.
Definitions¶
g(node): gets the code from the start to the node.
g_value: the cost to travel from the start to the node.
T(node): gets the children of a node.