Package graph

Class 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 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 handelt
        isGewichtet - 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 wird
        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 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 werden
        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 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 werden
        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 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 werden
        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 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 werden
        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 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 Startknotens
        zielNr - 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 - Startknoten
        ziel - 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 StartKnoten
        ziel - 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 StartKnoten
        zielnr - 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 soll
        ziel - Der ZielKnoten der Kante, die hinzugefuegt werden soll
        gewicht - 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 - StartKnotens
        ziel - 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 StartKnotens
        zielnr - 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.
        Overrides:
        toString in class Object
        Returns:
        Der Graph als Stringrepraesentation
      • 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 soll
        zeigeWert - 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
      • setStatus

        public void setStatus​(List<String> status)
        Stellt den Zustand des Graphen aus String-List wieder her
        Parameters:
        status - List mit Zustand