mirror of
https://github.com/onyx-and-iris/grokking-algorithms.git
synced 2024-11-16 01:40:53 +00:00
56 lines
1.1 KiB
Python
56 lines
1.1 KiB
Python
import logging
|
|
import math
|
|
|
|
logging.basicConfig(level=logging.DEBUG)
|
|
logger = logging.getLogger(__name__)
|
|
|
|
graph = {
|
|
"start": {"a": 10},
|
|
"a": {"c": 20},
|
|
"b": {"a": 1, "c": 1},
|
|
"c": {"b": 1, "fin": 30},
|
|
"fin": {},
|
|
}
|
|
|
|
costs = {
|
|
"a": 10,
|
|
"b": math.inf,
|
|
"c": math.inf,
|
|
"fin": math.inf,
|
|
}
|
|
|
|
parents = {
|
|
"a": "start",
|
|
"b": None,
|
|
"c": None,
|
|
"fin": None,
|
|
}
|
|
|
|
processed = set()
|
|
|
|
|
|
def find_lowest_cost_node(costs):
|
|
lowest_cost = math.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.add(node)
|
|
node = find_lowest_cost_node(costs)
|
|
|
|
print(f"lowest cost route: {costs['fin']}")
|