62 lines
1.2 KiB
Plaintext
62 lines
1.2 KiB
Plaintext
graph = {}
|
|
infinity = float("inf")
|
|
graph["start"] = {}
|
|
graph["start"]["a"] = 6
|
|
graph["start"]["b"] = 2
|
|
graph["start"]["c"] = infinity
|
|
|
|
graph["a"] = {}
|
|
graph["a"]["c"] = 4
|
|
graph["b"] = {}
|
|
graph["b"]["a"] = 3
|
|
graph["b"]["fin"] = infinity
|
|
graph["b"]["c"] = 8
|
|
|
|
graph["c"] = {}
|
|
graph["c"]["fin"] = 6
|
|
|
|
graph["fin"] = {}
|
|
|
|
costs = {}
|
|
costs["a"] = 6
|
|
costs["b"] = 2
|
|
costs["c"] = infinity
|
|
costs["fin"] = infinity
|
|
|
|
parents = {}
|
|
parents["a"] = "start"
|
|
parents["b"] = "start"
|
|
parents["fin"] = "c"
|
|
parents["c"] = "a"
|
|
parents["c"] = "b"
|
|
|
|
processed = []
|
|
|
|
|
|
def find_lowest_cost_node(costs):
|
|
lowest_cost = float("inf")
|
|
lowest_cost_node = None
|
|
for node in costs:
|
|
cost = costs[node]
|
|
if cost < lowest_cost and node not in processed:
|
|
lowest_cost = cost
|
|
lowest_cost_node = node
|
|
return lowest_cost_node
|
|
|
|
|
|
node = find_lowest_cost_node(costs)
|
|
while node is not None:
|
|
cost = costs[node]
|
|
neighbors = graph[node]
|
|
for n in neighbors.keys():
|
|
new_cost = cost + neighbors[n]
|
|
if costs[n] > new_cost:
|
|
costs[n] = new_cost
|
|
parents[n] = node
|
|
processed.append(node)
|
|
node = find_lowest_cost_node(costs)
|
|
|
|
print("Cost from the start to each node:")
|
|
print(costs)
|
|
print(parents)
|