KL_02_schusterje/graph.py
2025-01-13 20:48:05 +01:00

101 lines
3.5 KiB
Python

class Knoten(object):
def __init__(self, nameKnoten):
self.name = nameKnoten
self.kantenZuNachbarn = []
def addNachbar(self, refKante):
self.kantenZuNachbarn = self.kantenZuNachbarn + [(refKante)]
def delNachbar(self, refKante):
neueListe = []
for kante in self.kantenZuNachbarn:
if kante != refKante:
neueListe = neueListe + [kante]
self.kantenZuNachbarn = neueListe
class Kante(object):
def __init__(self, refStartKnoten, refZielKnoten):
self.startKnoten = refStartKnoten
self.zielKnoten = refZielKnoten
class Graph(object):
def __init__(self):
self.knotenListe = []
def getRefKnoten(self, nameKnoten):
refKnoten = None
for knoten in self.knotenListe:
if knoten.name == nameKnoten:
refKnoten = knoten
return refKnoten
def addKnoten(self, nameKnoten):
refKnoten = self.getRefKnoten(nameKnoten)
if refKnoten == None:
knoten = Knoten(nameKnoten)
self.knotenListe = self.knotenListe + [knoten]
def delKnoten(self, nameKnoten):
neueListe = []
for knoten in self.knotenListe:
if knoten.name != nameKnoten:
neueListe = neueListe + [knoten]
neueNachbarn = []
for kante in knoten.kantenZuNachbarn:
if kante.zielKnoten.name != nameKnoten:
neueNachbarn = neueNachbarn + [kante]
knoten.kantenZuNachbarn = neueNachbarn
self.knotenListe = neueListe
def addKante(self, nameStartKnoten, nameZielKnoten):
if self.existiertKnoten(nameStartKnoten) and \
self.existiertKnoten(nameZielKnoten) and \
not self.existiertKante(nameStartKnoten, nameZielKnoten):
refStartKnoten = self.getRefKnoten(nameStartKnoten)
refZielKnoten = self.getRefKnoten(nameZielKnoten)
if refStartKnoten != None and refZielKnoten != None:
neueKante = Kante(refStartKnoten, refZielKnoten)
refStartKnoten.addNachbar(neueKante)
def delKante(self, nameStartKnoten, nameZielKnoten):
for knoten in self.knotenListe:
if knoten.name == nameStartKnoten:
for kante in knoten.kantenZuNachbarn:
if kante.zielKnoten.name == nameZielKnoten:
knoten.delNachbar(kante)
def getAlleKnoten(self):
namenKnoten = []
for knoten in self.knotenListe:
namenKnoten = namenKnoten + [knoten.name]
return namenKnoten
def getAlleNachbarn(self, nameKnoten):
refKnoten = self.getRefKnoten(nameKnoten)
if refKnoten != None:
listeNachbarn = []
for kante in refKnoten.kantenZuNachbarn:
listeNachbarn = listeNachbarn + [kante.zielKnoten.name]
return listeNachbarn
else:
return []
def existiertKnoten(self, nameKnoten):
if self.getRefKnoten(nameKnoten) == None:
return False
else:
return True
def existiertKante(self, nameStartKnoten, nameZielKnoten):
gefunden = False
refStartKnoten = self.getRefKnoten(nameStartKnoten)
refZielKnoten = self.getRefKnoten(nameZielKnoten)
if refStartKnoten != None and refZielKnoten != None:
for kante in refStartKnoten.kantenZuNachbarn:
if kante.zielKnoten == refZielKnoten:
gefunden = True
return gefunden