forked from hofmannol/AlgoDatSoSe25
32 lines
1.1 KiB
Python
32 lines
1.1 KiB
Python
from vorlesung.L08_graphen.graph import Graph, AdjacencyMatrixGraph
|
|
from utils.project_dir import get_path
|
|
import re
|
|
|
|
def read_elektro_into_graph(graph: Graph, filename: str):
|
|
pattern = re.compile(r'"([^"]+)";"([^"]+)";(\d+)')
|
|
with (open(filename, "r") as file):
|
|
for line in file:
|
|
m = pattern.match(line)
|
|
if m:
|
|
start_name = m.group(1)
|
|
end_name = m.group(2)
|
|
cost = int(m.group(3))
|
|
graph.insert_vertex(start_name)
|
|
graph.insert_vertex(end_name)
|
|
graph.connect(start_name, end_name, cost)
|
|
graph.connect(end_name, start_name, cost)
|
|
|
|
if __name__ == "__main__":
|
|
graph = AdjacencyMatrixGraph()
|
|
read_elektro_into_graph(graph, get_path("data/elektro.txt"))
|
|
|
|
parents, cost = graph.mst_prim()
|
|
print(f"Kosten nach Prim: {cost}")
|
|
for node, parent in parents.items():
|
|
if parent is not None:
|
|
print(f"{node} - {parent}")
|
|
|
|
edges, cost = graph.mst_kruskal()
|
|
print(f"Kosten nach Kruskal: {cost}")
|
|
for start_name, end_name, _ in edges:
|
|
print(f"{start_name} - {end_name}") |