Package graph
Class Graph
java.lang.Object
graph.Graph
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 -
Method Summary
Modifier and TypeMethodDescriptionvoid
ausgabe()
Konsolenausgabe der textuellen Repraesentation des Graphen.void
entferneKante
(int startnr, int zielnr) Entfernt eine Kante aus dem Graphen.void
entferneKante
(graph.Kante e) Entfernt eine Kante aus dem Graphen.void
entferneKante
(graph.Knoten start, graph.Knoten ziel) Entfernt eine Kante aus dem Graphen.void
entferneKnoten
(int knotennr) Entfernt einen Knoten aus dem Graphenboolean
entferneKnoten
(graph.Knoten k) Entfernt einen Knoten aus dem Graphenvoid
Entfernt die Markierung bei allen Knoten des Graphen.double[][]
Die Methode getAdjazenzMatrix() gibt die Adjazenzmatrix zurueck.List<graph.Kante>
getAlleKanten
(Predicate<graph.Kante>... filter) Gibt eine Liste aller Kanten des Graphen zurück.List<graph.Knoten>
getAlleKnoten
(Predicate<graph.Knoten>... filter) Gibt eine Liste aller Knoten des Graphen zurueck.int
Gibt die Anzahl der Knoten im Graph zurueckList<graph.Kante>
getAusgehendeKanten
(int knotennr, Predicate<graph.Kante>... filter) Gibt eine Liste der ausgehenden Kanten eines Knotens k zurueck, falls k in der Knotenliste vorhanden ist.List<graph.Kante>
getAusgehendeKanten
(graph.Knoten k, Predicate<graph.Kante>... filter) Gibt eine Liste der ausgehenden Kanten eines Knotens k zurueck, falls k in der Knotenliste vorhanden ist.List<graph.Kante>
getEingehendeKanten
(int knotennr, Predicate<graph.Kante>... filter) Gibt eine Liste der eingehenden Kanten eines Knotens k zurueck, falls k in der Knotenliste vorhanden ist.List<graph.Kante>
getEingehendeKanten
(graph.Knoten k, Predicate<graph.Kante>... filter) Gibt eine Liste der eingehenden Kanten eines Knotens k zurueck, falls k in der Knotenliste vorhanden ist.graph.Kante
getKante
(int startnr, int zielnr) Gibt eine gesuchte Kante aus dem Graphen zurueck.graph.Kante
getKante
(graph.Knoten start, graph.Knoten ziel) Gibt eine gesuchte Kante aus dem Graphen zurueck.graph.Knoten
getKnoten
(int knotennr) Liefert einen Knoten des GraphengetKnoteninfo
(graph.Knoten k, boolean zeigeWert) Info über einen Knoten zurückgebenList<graph.Knoten>
getNachbarknoten
(graph.Knoten k, Predicate<graph.Knoten>... filter) Gibt die Liste aller Nachbarknoten eines Knotens k zurueck, falls k in der Knotenliste vorhanden ist.int
getNummer
(graph.Kante k) Gibt die Nummer einer Kante zurückint
getNummer
(graph.Knoten k) Gibt die Nummer eines Knotens im Graphen zurückSpeichert den Zustand des Graphen als String-Listvoid
Initialisiert alle Kanten des Graphen.void
Initialisiert alle Knoten des Graphen.boolean
Gibt zurueck, ob der Graph gerichtet oder ungerichtet ist.boolean
Gibt zurueck, ob der Graph gewichtet oder ungewichtet istboolean
isKanteEnthalten
(int startNr, int zielNr) Ueberprueft, ob eine Kante im Graphen enthalten ist.boolean
isKanteEnthalten
(graph.Kante e) Ueberprueft, ob eine Kante im Graphen enthalten ist.boolean
isKanteEnthalten
(graph.Knoten start, graph.Knoten ziel) Ueberprueft, ob eine Kante im Graphen enthalten ist.boolean
isKnotenEnthalten
(graph.Knoten k) Ueberprueft, ob ein Knoten in der Knotenliste enthalten ist.boolean
isLeer()
Ueberprueft, ob die Adjazenzliste leer ist, d.h. keine Knoten im Graphen enthalten sind.boolean
ladeGraph
(imp.Table csvParser) Ein Graph wird aus einer csv-Datei erstellt, die entweder eine Matrix oder eine Adjazenzliste enthält, die den Graph beschreibt.void
Loescht den gesamten Graphenvoid
Löscht alle Knoten und Kanten eines Graphen und stellt auf ungerichtet und ungewichtet zurück.void
neueKante
(graph.Kante e) Fuegt eine Kante dem Graphen hinzu.void
neueKante
(graph.Knoten start, graph.Knoten ziel, double gewicht) Fuegt eine Kante dem Graphen hinzu.void
neuerKnoten
(graph.Knoten k) Fügt einen Knoten dem Graph hinzu.void
setGerichtet
(boolean isGerichtet) Legt fest, ob der Graph gerichtet oder ungerichtet ist.void
setGewichtet
(boolean isGewichtet) Legt fest, ob der Graph gewichtet oder ungewichtet ist.void
Stellt den Zustand des Graphen aus String-List wieder hertoCSVString
(boolean asMatrix) Die Methode erstellt eine CSV-Ausgabe des Graphen entweder als Adjazenzliste oder als Adjazenzmatrix.toString()
Textuelle Repraesentation des Graphen.
-
Constructor Details
-
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 Details
-
loescheGraph
public void loescheGraph()Löscht alle Knoten und Kanten eines Graphen und stellt auf ungerichtet und ungewichtet zurück. -
ladeGraph
public boolean ladeGraph(imp.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(graph.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(graph.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
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(graph.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
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
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
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
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
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
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 graph.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(graph.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(graph.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(graph.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(graph.Knoten start, graph.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 graph.Kante getKante(graph.Knoten start, graph.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 graph.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(graph.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(graph.Knoten start, graph.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(graph.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(graph.Knoten start, graph.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
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
Textuelle Repraesentation des Graphen. -
ausgabe
public void ausgabe()Konsolenausgabe der textuellen Repraesentation des Graphen. -
getKnoteninfo
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
Speichert den Zustand des Graphen als String-List- Returns:
- List mit Zustand
-
setStatus
Stellt den Zustand des Graphen aus String-List wieder her- Parameters:
status
- List mit Zustand
-