49 lines
1.5 KiB
Python
49 lines
1.5 KiB
Python
"""
|
|
This module holds the logic for the solving
|
|
"""
|
|
|
|
|
|
class Dijkstra():
|
|
def __init__(self, graph: dict, connection: tuple):
|
|
"""
|
|
table: matrix with vertex as key, price and prev vertex as value
|
|
OL: open list, to keep track of finished vertecis
|
|
"""
|
|
self.graph = graph
|
|
self.table = {}
|
|
for vertex in graph:
|
|
self.table.update({vertex: {"distance": 9999999, "prev": None}})
|
|
self.table[connection[0]]["distance"] = 0
|
|
|
|
def algorithm(self):
|
|
print("Performing Dijkstra on the following graph...")
|
|
for vertex in self.graph:
|
|
print(f"{vertex}: {self.graph[vertex]}")
|
|
|
|
for v1 in self.graph.keys():
|
|
neighbors = self.graph[v1]
|
|
for n in neighbors:
|
|
key = [elem for elem in n.keys()][0] # name of neighbor node
|
|
# NOTE: change time or co2 here
|
|
edge = n[key]["time"]
|
|
dist = self.table[v1]["distance"] + edge
|
|
if dist < self.table[key]["distance"]:
|
|
self.table[key]["distance"] = dist
|
|
self.table[key]["prev"] = v1
|
|
|
|
print("self.table:", self.table)
|
|
|
|
def print_result(self, connection: tuple):
|
|
sequence = []
|
|
(start, dest) = connection
|
|
# start at destination
|
|
sequence.append(dest)
|
|
|
|
while start not in sequence:
|
|
# previous jump
|
|
prev = self.table[sequence[-1]]["prev"]
|
|
sequence.append(prev)
|
|
|
|
sequence.reverse()
|
|
print(sequence)
|