Lekcja – Algorytm Dijkstra
graph = {
'A': {'B': 2, 'D': 4},
'B': {'C': 3, 'D': 3},
'C': {'E': 2},
'D': {'C': 3, 'E': 4},
'E':{}
}
def get_cheapest_node(costs_dict, processed_list):
cheapest_cost = float('inf')
cheapest_key = None
for name, cost in costs_dict.items():
if name not in processed_list and cost < cheapest_cost:
cheapest_cost = cost
cheapest_key = name
return cheapest_key
costs={}
parents={}
for name in graph.keys():
costs[name] = float('inf')
processed = []
current_node = 'A'
costs[current_node] = 0
parents[current_node] = None
while current_node:
#calculate cost of the neighbours
for neighbour in graph[current_node]:
if costs[neighbour] > costs[current_node] + graph[current_node][neighbour]:
costs[neighbour] = costs[current_node] + graph[current_node][neighbour]
parents[neighbour] = current_node
processed.append(current_node)
current_node = get_cheapest_node(costs, processed)
for d,c in costs.items():
print(f'The cost for {d} is {c}')
current_d = d
while parents[current_d]:
print(current_d)
current_d = parents[current_d]
else:
print(current_d)
Lab
graph = {
'Ciudad Polacca': {'Santo Subito': 15, 'Senderos': 10},
'Senderos': {'Dos Rios': 20},
'Santo Subito': {'Dos Rios': 5, 'Al Pacino': 50},
'Dos Rios': {'Frontera': 20, 'Arboleda': 5},
'Frontera': {'Al Pacino': 10},
'Arboleda': {'Al Pacino': 10},
'Al Pacino': {}
}
def get_cheapest_node(costs_dict, processed_list):
cheapest_cost = float('inf')
cheapest_key = None
for name, cost in costs_dict.items():
if name not in processed_list and cost < cheapest_cost:
cheapest_cost = cost
cheapest_key = name
return cheapest_key
costs={}
parents={}
for name in graph.keys():
costs[name] = float('inf')
processed = []
current_node = 'Ciudad Polacca'
costs[current_node] = 0
parents[current_node] = None
while current_node:
#calculate cost of the neighbours
for neighbour in graph[current_node]:
if costs[neighbour] > costs[current_node] + graph[current_node][neighbour]:
costs[neighbour] = costs[current_node] + graph[current_node][neighbour]
parents[neighbour] = current_node
processed.append(current_node)
current_node = get_cheapest_node(costs, processed)
for d,c in costs.items():
print(f'The cost for {d} is {c}')
current_d = d
while parents[current_d]:
print(current_d)
current_d = parents[current_d]
else:
print(current_d)