Package graph
Class Graph
- java.lang.Object
-
- graph.Graph
-
public class Graph extends Object
Dies ist das Herz vom "GraphTester" - der Graph selber, gepeichert als Adjazenzliste. Die Klasse erlaubt durch geeignete Methoden: - die Speicherung als Adjazenzmatrix, - das Hinzufuegen und Loeschen von knoten und Kanten, - das Markieren von Knoten und Kanten, - eine Aussage darueber, ob Knoten oder Kanten enthalten sind und - eine Ausgabe des Graphen in textueller Form sowie als csv-Datei.- Version:
- 31.01.2021 (v6.5)
- Author:
- Dirk Zechnall, Thomas Schaller
-
-
Constructor Summary
Constructors Constructor Description Graph()Der Konstruktor erstellt einen neuen ungerichteten, ungewichteten Graphen (genauer eine neue Adjazenzliste)Graph(boolean isGerichtet, boolean isGewichtet)Der Konstruktor erstellt einen neuen Graphen (genauer eine neue Adjazenzliste)
-
Method Summary
All Methods Instance Methods Concrete Methods Modifier and Type Method Description voidausgabe()Konsolenausgabe der textuellen Repraesentation des Graphen.voidentferneKante(int startnr, int zielnr)Entfernt eine Kante aus dem Graphen.voidentferneKante(Kante e)Entfernt eine Kante aus dem Graphen.voidentferneKante(Knoten start, Knoten ziel)Entfernt eine Kante aus dem Graphen.voidentferneKnoten(int knotennr)Entfernt einen Knoten aus dem GraphenbooleanentferneKnoten(Knoten k)Entfernt einen Knoten aus dem GraphenvoidentferneMarkierungBeiAllenKnoten()Entfernt die Markierung bei allen Knoten des Graphen.double[][]getAdjazenzMatrix()Die Methode getAdjazenzMatrix() gibt die Adjazenzmatrix zurueck.List<Kante>getAlleKanten(Predicate<Kante>... filter)Gibt eine Liste aller Kanten des Graphen zurück.List<Knoten>getAlleKnoten(Predicate<Knoten>... filter)Gibt eine Liste aller Knoten des Graphen zurueck.intgetAnzahlKnoten()Gibt die Anzahl der Knoten im Graph zurueckList<Kante>getAusgehendeKanten(int knotennr, Predicate<Kante>... filter)Gibt eine Liste der ausgehenden Kanten eines Knotens k zurueck, falls k in der Knotenliste vorhanden ist.List<Kante>getAusgehendeKanten(Knoten k, Predicate<Kante>... filter)Gibt eine Liste der ausgehenden Kanten eines Knotens k zurueck, falls k in der Knotenliste vorhanden ist.List<Kante>getEingehendeKanten(int knotennr, Predicate<Kante>... filter)Gibt eine Liste der eingehenden Kanten eines Knotens k zurueck, falls k in der Knotenliste vorhanden ist.List<Kante>getEingehendeKanten(Knoten k, Predicate<Kante>... filter)Gibt eine Liste der eingehenden Kanten eines Knotens k zurueck, falls k in der Knotenliste vorhanden ist.KantegetKante(int startnr, int zielnr)Gibt eine gesuchte Kante aus dem Graphen zurueck.KantegetKante(Knoten start, Knoten ziel)Gibt eine gesuchte Kante aus dem Graphen zurueck.KnotengetKnoten(int knotennr)Liefert einen Knoten des GraphenStringgetKnoteninfo(Knoten k, boolean zeigeWert)Info über einen Knoten zurückgebenList<Knoten>getNachbarknoten(Knoten k, Predicate<Knoten>... filter)Gibt die Liste aller Nachbarknoten eines Knotens k zurueck, falls k in der Knotenliste vorhanden ist.intgetNummer(Kante k)Gibt die Nummer einer Kante zurückintgetNummer(Knoten k)Gibt die Nummer eines Knotens im Graphen zurückList<String>getStatus()Speichert den Zustand des Graphen als String-ListvoidinitialisiereAlleKanten()Initialisiert alle Kanten des Graphen.voidinitialisiereAlleKnoten()Initialisiert alle Knoten des Graphen.booleanisGerichtet()Gibt zurueck, ob der Graph gerichtet oder ungerichtet ist.booleanisGewichtet()Gibt zurueck, ob der Graph gewichtet oder ungewichtet istbooleanisKanteEnthalten(int startNr, int zielNr)Ueberprueft, ob eine Kante im Graphen enthalten ist.booleanisKanteEnthalten(Kante e)Ueberprueft, ob eine Kante im Graphen enthalten ist.booleanisKanteEnthalten(Knoten start, Knoten ziel)Ueberprueft, ob eine Kante im Graphen enthalten ist.booleanisKnotenEnthalten(Knoten k)Ueberprueft, ob ein Knoten in der Knotenliste enthalten ist.booleanisLeer()Ueberprueft, ob die Adjazenzliste leer ist, d.h. keine Knoten im Graphen enthalten sind.booleanladeGraph(Table csvParser)Ein Graph wird aus einer csv-Datei erstellt, die entweder eine Matrix oder eine Adjazenzliste enthält, die den Graph beschreibt.voidloescheAlles()Loescht den gesamten GraphenvoidloescheGraph()Löscht alle Knoten und Kanten eines Graphen und stellt auf ungerichtet und ungewichtet zurück.voidneueKante(Kante e)Fuegt eine Kante dem Graphen hinzu.voidneueKante(Knoten start, Knoten ziel, double gewicht)Fuegt eine Kante dem Graphen hinzu.voidneuerKnoten(Knoten k)Fügt einen Knoten dem Graph hinzu.voidsetGerichtet(boolean isGerichtet)Legt fest, ob der Graph gerichtet oder ungerichtet ist.voidsetGewichtet(boolean isGewichtet)Legt fest, ob der Graph gewichtet oder ungewichtet ist.voidsetStatus(List<String> status)Stellt den Zustand des Graphen aus String-List wieder herStringtoCSVString(boolean asMatrix)Die Methode erstellt eine CSV-Ausgabe des Graphen entweder als Adjazenzliste oder als Adjazenzmatrix.StringtoString()Textuelle Repraesentation des Graphen.
-
-
-
Constructor Detail
-
Graph
public Graph(boolean isGerichtet, boolean isGewichtet)Der Konstruktor erstellt einen neuen Graphen (genauer eine neue Adjazenzliste)- Parameters:
isGerichtet- gibt an, ob es sich um einen gerichteten Graphen handeltisGewichtet- gibt an, ob die Kanten gewichtet sind.
-
Graph
public Graph()
Der Konstruktor erstellt einen neuen ungerichteten, ungewichteten Graphen (genauer eine neue Adjazenzliste)
-
-
Method Detail
-
loescheGraph
public void loescheGraph()
Löscht alle Knoten und Kanten eines Graphen und stellt auf ungerichtet und ungewichtet zurück.
-
ladeGraph
public boolean ladeGraph(Table csvParser)
Ein Graph wird aus einer csv-Datei erstellt, die entweder eine Matrix oder eine Adjazenzliste enthält, die den Graph beschreibt.- Parameters:
csvParser- Eine CSV-Datei als Table-Objekt- Returns:
- gibt zurück, ob das Laden erfolgreich war
-
setGewichtet
public void setGewichtet(boolean isGewichtet)
Legt fest, ob der Graph gewichtet oder ungewichtet ist.- Parameters:
isGewichtet- neuer Wert
-
isGewichtet
public boolean isGewichtet()
Gibt zurueck, ob der Graph gewichtet oder ungewichtet ist- Returns:
- gewichtet? (true/false)
-
setGerichtet
public void setGerichtet(boolean isGerichtet)
Legt fest, ob der Graph gerichtet oder ungerichtet ist.- Parameters:
isGerichtet- neuer Wert
-
isGerichtet
public boolean isGerichtet()
Gibt zurueck, ob der Graph gerichtet oder ungerichtet ist.- Returns:
- gerichtet? (true/false)
-
getNummer
public int getNummer(Knoten k)
Gibt die Nummer eines Knotens im Graphen zurück- Parameters:
k- gesuchter Knoten- Returns:
- Nummer des Knotens (mit 0 beginnend)
-
getNummer
public int getNummer(Kante k)
Gibt die Nummer einer Kante zurück- Parameters:
k- gesuchte Kante- Returns:
- Nummer der Kante (mit 0 beginnend)
-
getAdjazenzMatrix
public double[][] getAdjazenzMatrix()
Die Methode getAdjazenzMatrix() gibt die Adjazenzmatrix zurueck.- Returns:
- double[][] Die AdjazenzMatrix als zweidimensionales Array
-
getAlleKanten
public List<Kante> getAlleKanten(Predicate<Kante>... filter)
Gibt eine Liste aller Kanten des Graphen zurück.- Parameters:
filter- optionaler Filter, der auf die Liste angewendet wird. Er muss einen boolean-Wert zurückgeben: z.B. @literal{k->k.isMarkiert() && k.isBesucht()}- Returns:
- Liste aller Kanten
-
entferneMarkierungBeiAllenKnoten
public void entferneMarkierungBeiAllenKnoten()
Entfernt die Markierung bei allen Knoten des Graphen.
-
initialisiereAlleKnoten
public void initialisiereAlleKnoten()
Initialisiert alle Knoten des Graphen.
-
initialisiereAlleKanten
public void initialisiereAlleKanten()
Initialisiert alle Kanten des Graphen.
-
isKnotenEnthalten
public boolean isKnotenEnthalten(Knoten k)
Ueberprueft, ob ein Knoten in der Knotenliste enthalten ist. Sobald in der Knotenliste der Knoten k gefunden wird, wird true ausgegeben.- Parameters:
k- Der gesuchte Knoten- Returns:
- true= ist enthalten, false = ist nicht enthalten
-
getAnzahlKnoten
public int getAnzahlKnoten()
Gibt die Anzahl der Knoten im Graph zurueck- Returns:
- Anzahl der Knoten
-
getAlleKnoten
public List<Knoten> getAlleKnoten(Predicate<Knoten>... filter)
Gibt eine Liste aller Knoten des Graphen zurueck.- Parameters:
filter- optionaler Filter, der auf die Liste angewendet wird. Er muss einen boolean-Wert zurückgeben: z.B. @literal{k->k.isMarkiert() && k.isBesucht()}- Returns:
- Die Knotenliste. Falls leer wird eine leere Liste zurueckgegeben
-
getNachbarknoten
public List<Knoten> getNachbarknoten(Knoten k, Predicate<Knoten>... filter)
Gibt die Liste aller Nachbarknoten eines Knotens k zurueck, falls k in der Knotenliste vorhanden ist.- Parameters:
k- Der Knoten, zu dem die Adjazenzliste gesucht wirdfilter- optionaler Filter, der auf die Liste angewendet wird. Er muss einen boolean-Wert zurückgeben: z.B. @literal{k->k.isMarkiert() && k.isBesucht()}- Returns:
- Liste der Nachbarknoten
-
getAusgehendeKanten
public List<Kante> getAusgehendeKanten(Knoten k, Predicate<Kante>... filter)
Gibt eine Liste der ausgehenden Kanten eines Knotens k zurueck, falls k in der Knotenliste vorhanden ist. Bei ungerichteten Graphen wird nicht zwischen eingehenden und ausgehenden Kanten unterschieden.- Parameters:
k- Der Knoten, zu dem die Kanten gesucht werdenfilter- optionaler Filter, der auf die Liste angewendet wird. Er muss einen boolean-Wert zurückgeben: z.B. @literal{k->k.isMarkiert() && k.isBesucht()}- Returns:
- Liste der ausgehenden Kanten.
-
getAusgehendeKanten
public List<Kante> getAusgehendeKanten(int knotennr, Predicate<Kante>... filter)
Gibt eine Liste der ausgehenden Kanten eines Knotens k zurueck, falls k in der Knotenliste vorhanden ist. Bei ungerichteten Graphen wird nicht zwischen eingehenden und ausgehenden Kanten unterschieden.- Parameters:
knotennr- Nummer des Knoten, zu dem die Kanten gesucht werdenfilter- optionaler Filter, der auf die Liste angewendet wird. Er muss einen boolean-Wert zurückgeben: z.B. @literal{k->k.isMarkiert() && k.isBesucht()}- Returns:
- Liste der ausgehenden Kanten.
-
getEingehendeKanten
public List<Kante> getEingehendeKanten(int knotennr, Predicate<Kante>... filter)
Gibt eine Liste der eingehenden Kanten eines Knotens k zurueck, falls k in der Knotenliste vorhanden ist. Bei ungerichteten Graphen wird nicht zwischen eingehenden und ausgehenden Kanten unterschieden.- Parameters:
knotennr- Die Nummer des Knotens, zu dem die Kanten gesucht werdenfilter- optionaler Filter, der auf die Liste angewendet wird. Er muss einen boolean-Wert zurückgeben: z.B. @literal{k->k.isMarkiert() && k.isBesucht()}- Returns:
- Liste der eingehenden Kanten.
-
getEingehendeKanten
public List<Kante> getEingehendeKanten(Knoten k, Predicate<Kante>... filter)
Gibt eine Liste der eingehenden Kanten eines Knotens k zurueck, falls k in der Knotenliste vorhanden ist. Bei ungerichteten Graphen wird nicht zwischen eingehenden und ausgehenden Kanten unterschieden.- Parameters:
k- Knoten, zu dem die Kanten gesucht werdenfilter- optionaler Filter, der auf die Liste angewendet wird. Er muss einen boolean-Wert zurückgeben: z.B. @literal{k->k.isMarkiert() && k.isBesucht()}- Returns:
- Liste der eingehenden Kanten.
-
getKnoten
public Knoten getKnoten(int knotennr)
Liefert einen Knoten des Graphen- Parameters:
knotennr- Nummer der Knoten (beginnend mit 0)- Returns:
- liefert den Knoten mit dieser Nummer
-
neuerKnoten
public void neuerKnoten(Knoten k)
Fügt einen Knoten dem Graph hinzu.- Parameters:
k- Der Knoten, der hinzugefuegt werden soll
-
entferneKnoten
public void entferneKnoten(int knotennr)
Entfernt einen Knoten aus dem Graphen- Parameters:
knotennr- Nummer des Knotens, der geloescht werden soll
-
entferneKnoten
public boolean entferneKnoten(Knoten k)
Entfernt einen Knoten aus dem Graphen- Parameters:
k- Knoten, der geloescht werden soll- Returns:
- gibt zurück, ob der Knoten erfolgreich entfernt wurde.
-
isKanteEnthalten
public boolean isKanteEnthalten(Kante e)
Ueberprueft, ob eine Kante im Graphen enthalten ist.- Parameters:
e- Die zu suchende Kante- Returns:
- Kante enthalten (true) oder nicht (false)
-
isKanteEnthalten
public boolean isKanteEnthalten(int startNr, int zielNr)Ueberprueft, ob eine Kante im Graphen enthalten ist. In ungerichteten Graphen wird nicht zwischen Start- und Zielknoten unterschieden- Parameters:
startNr- Nummer des StartknotenszielNr- Nummer des Zielknotens- Returns:
- boolean Kante enthalten (true) oder nicht (false)
-
isKanteEnthalten
public boolean isKanteEnthalten(Knoten start, Knoten ziel)
Ueberprueft, ob eine Kante im Graphen enthalten ist. In ungerichteten Graphen wird nicht zwischen Start- und Zielknoten unterschieden- Parameters:
start- Startknotenziel- Zielknoten- Returns:
- boolean Kante enthalten (true) oder nicht (false)
-
getKante
public Kante getKante(Knoten start, Knoten ziel)
Gibt eine gesuchte Kante aus dem Graphen zurueck. In ungerichteten Graphen wird nicht zwischen Start- und Zielknoten unterschieden- Parameters:
start- Der StartKnotenziel- Der StartKnoten- Returns:
- Die gesuchte Kante
-
getKante
public Kante getKante(int startnr, int zielnr)
Gibt eine gesuchte Kante aus dem Graphen zurueck. In ungerichteten Graphen wird nicht zwischen Start- und Zielknoten unterschieden- Parameters:
startnr- Der Nummer des StartKnotenzielnr- Die Nummer des Zielknoten- Returns:
- Die gesuchte Kante
-
neueKante
public void neueKante(Kante e)
Fuegt eine Kante dem Graphen hinzu. Dabei wird ueberprueft, ob die Kante schon im Graphen enthalten ist. Ist der Graph ungerichtet, werden sowohl "Hin-" und "RueckKante" erstellt.- Parameters:
e- Die Kante, die hinzugefuegt werden soll
-
neueKante
public void neueKante(Knoten start, Knoten ziel, double gewicht)
Fuegt eine Kante dem Graphen hinzu. Dabei wird ueberprueft, ob die Kante schon im Graphen enthalten ist. Ist der Graph ungerichtet, werden sowohl "Hin-" und "RueckKante" erstellt.- Parameters:
start- Der StartKnoten der Kante, die hinzugefuegt werden sollziel- Der ZielKnoten der Kante, die hinzugefuegt werden sollgewicht- Das Gewicht der Kante, die hinzugefuegt werden soll
-
entferneKante
public void entferneKante(Kante e)
Entfernt eine Kante aus dem Graphen. Ist der Graph ungerichtet, werden sowohl "Hin-" und "RueckKante" entfernt.- Parameters:
e- Die zu entfernende Kante
-
entferneKante
public void entferneKante(Knoten start, Knoten ziel)
Entfernt eine Kante aus dem Graphen. Dabei wird ueberprueft, ob die Kante ueberhaupt im Graphen enthalten ist. Ist der Graph ungerichtet, werden sowohl "Hin-" und "RueckKante" entfernt.- Parameters:
start- StartKnotensziel- ZielKnotens
-
entferneKante
public void entferneKante(int startnr, int zielnr)Entfernt eine Kante aus dem Graphen. Ist der Graph ungerichtet, werden sowohl "Hin-" und "RueckKante" entfernt.- Parameters:
startnr- Nummer des StartKnotenszielnr- Nummer des ZielKnotens
-
isLeer
public boolean isLeer()
Ueberprueft, ob die Adjazenzliste leer ist, d.h. keine Knoten im Graphen enthalten sind.- Returns:
- true, wenn die Liste leer ist, sonst false
-
loescheAlles
public void loescheAlles()
Loescht den gesamten Graphen
-
toCSVString
public String toCSVString(boolean asMatrix)
Die Methode erstellt eine CSV-Ausgabe des Graphen entweder als Adjazenzliste oder als Adjazenzmatrix.- Parameters:
asMatrix- true, falls die CSV-Ausgabe eine AdjazenzMatrix sein soll, sonst false- Returns:
- CSV-Ausgabe
-
toString
public String toString()
Textuelle Repraesentation des Graphen.
-
ausgabe
public void ausgabe()
Konsolenausgabe der textuellen Repraesentation des Graphen.
-
getKnoteninfo
public String getKnoteninfo(Knoten k, boolean zeigeWert)
Info über einen Knoten zurückgeben- Parameters:
k- Knoten, des Info ermittelt werden sollzeigeWert- Soll der Wert des Knoten in der Info enthalten sein- Returns:
- Infotext oder Nummer des Knoten und ggf. sein Wert
-
getStatus
public List<String> getStatus()
Speichert den Zustand des Graphen als String-List- Returns:
- List mit Zustand
-
-