forked from hofmannol/AlgoDatSoSe25
38 lines
1.3 KiB
Python
38 lines
1.3 KiB
Python
import re
|
|
from utils.project_dir import get_path
|
|
from vorlesung.L08_graphen.graph import Graph, AdjacencyListGraph, AdjacencyMatrixGraph
|
|
|
|
|
|
def read_cave_into_graph(graph: Graph, filename: str):
|
|
"""Read a cave description from a file and insert it into the given graph."""
|
|
filename = get_path(filename)
|
|
with open(filename, "r") as file:
|
|
lines = file.readlines()
|
|
for line in lines:
|
|
# match a line with two node names and an optional direction
|
|
m = re.match(r"(^\s*\"(.*)\"\s*([<>]*)\s*\"(.*)\"\s*)", line)
|
|
if m:
|
|
startnode = m.group(2)
|
|
endnode = m.group(4)
|
|
opcode = m.group(3)
|
|
graph.insert_vertex(startnode)
|
|
graph.insert_vertex(endnode)
|
|
if '>' in opcode:
|
|
graph.connect(startnode, endnode)
|
|
if '<' in opcode:
|
|
graph.connect(endnode, startnode)
|
|
|
|
|
|
graph = AdjacencyListGraph()
|
|
# graph = AdjacencyMatrixGraph()
|
|
read_cave_into_graph(graph, "data/hoehle.txt")
|
|
_, predecessor_map = graph.bfs('Höhleneingang')
|
|
path = graph.path('Schatzkammer', predecessor_map)
|
|
print(path)
|
|
_, predecessor_map = graph.bfs('Schatzkammer')
|
|
path = graph.path('Höhleneingang', predecessor_map)
|
|
print(path)
|
|
graph.graph("Höhle")
|
|
|
|
|