Add exercise 2 solution
This commit is contained in:
55
notes-and-examples/2026.08.11/exercise2_solution.py
Normal file
55
notes-and-examples/2026.08.11/exercise2_solution.py
Normal file
@@ -0,0 +1,55 @@
|
||||
# note: I added Anaheim to the sample graph here. The solution should work
|
||||
# appropriately with either graph.
|
||||
|
||||
sample_graph = {
|
||||
'Santa Ana': {
|
||||
'Los Angeles': 5,
|
||||
'Anaheim': 3,
|
||||
'Palm Springs': 50
|
||||
},
|
||||
'Anaheim': {
|
||||
'Los Angeles': 2,
|
||||
'Santa Ana': 3
|
||||
},
|
||||
'Los Angeles': {
|
||||
'Anaheim': 2,
|
||||
'San Francisco': 25,
|
||||
'Santa Ana': 5
|
||||
},
|
||||
'Palm Springs': {
|
||||
'San Francisco': 30,
|
||||
'Santa Ana': 50
|
||||
},
|
||||
'San Francisco': {
|
||||
'Los Angeles': 25,
|
||||
'Palm Springs': 30
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
def possible_paths(graph: dict[str, dict[str, int]],
|
||||
start: str,
|
||||
end: str):
|
||||
# (path, total distance represented by path)
|
||||
queue = [([start], 0)]
|
||||
valid_paths = []
|
||||
|
||||
# appending to queue:
|
||||
# append the new vertex to the path, add the distance to the total distance
|
||||
# do not append to queue if in visited
|
||||
|
||||
while queue:
|
||||
path, distance = queue.pop(0)
|
||||
if path[-1] == end:
|
||||
valid_paths.append((path, distance))
|
||||
else:
|
||||
for vertex, weight in graph[path[-1]].items():
|
||||
# question: what can we do to improve time efficiency here?
|
||||
if vertex not in path:
|
||||
new_path = path.copy()
|
||||
new_path.append(vertex)
|
||||
queue.append((new_path, distance + weight))
|
||||
|
||||
return valid_paths
|
||||
|
||||
print(possible_paths(sample_graph, 'Santa Ana', 'San Francisco'))
|
||||
Reference in New Issue
Block a user