Sem4SE/04/karte.py
2026-05-21 14:52:47 +02:00

113 lines
2.6 KiB
Python
Executable File

connections = [('Würzburg', 'Schweinfurt', 50),
('Würzburg', 'Nürnberg', 100),
('Schweinfurt', 'Bamberg', 60),
('Bamberg', 'Coburg', 50),
('Bamberg', 'Nürnberg', 60),
('Bamberg', 'Bayreuth', 60),
('Nürnberg', 'Bayreuth', 90),
('Bayreuth', 'Hof', 50),
('Coburg', 'Hof', 80),
]
def allNodes(connections):
nodes = set()
for a in connections:
nodes.add(a[0])
nodes.add(a[1])
return nodes
def initMap(connections):
m = allNodes(connections)
knoten = {}
for a in m:
knoten[a] = {}
return knoten
def addConnection(data, connection):
a, b, c = connection
data[a].setdefault('connection', []).append([b, c])
data[b].setdefault('connection', []).append([a, c])
return data
def resetMap(map):
for node in map:
map[node]["distance"] = None
map[node]["predecessor"] = None
map[node]["finalized"] = False
def setStart(map, start):
resetMap(map)
map[start]["distance"] = 0
map[start]["predecessor"] = start
map[start]["finalized"] = False
return map
def calculateAllDistances(map: dict):
while True:
knoten = None
dist = None
for stadt in map:
if map[stadt]["finalized"] == False and map[stadt]["distance"] is not None:
if dist is None or map[stadt]["distance"] < dist:
knoten = stadt
dist = map[stadt]["distance"]
if knoten == None:
break
map[knoten]["finalized"] = True
for verbindung in map[knoten]["connection"]:
zielstadt = verbindung[0]
entfernung = verbindung[1]
neue_entfernung = map[knoten]["distance"] + entfernung
if map[zielstadt]["distance"] is None or neue_entfernung < map[zielstadt]["distance"]:
map[zielstadt]["distance"] = neue_entfernung
map[zielstadt]["predecessor"] = knoten
return map
def pathFromTo(map, start, ende):
path = []
aktuelle_stadt = ende
while True:
path.insert(0, aktuelle_stadt)
if aktuelle_stadt == start:
break
aktuelle_stadt = map[aktuelle_stadt]["predecessor"]
return path
map = initMap(connections)
# print(initMap(connections))
# print(connections[0][0])
for con in connections:
addConnection(map, con)
# print(map)
setStart(map, "Würzburg")
calculateAllDistances(map)
print(calculateAllDistances(map))
print(pathFromTo(map, "Würzburg", "Hof"))