First Commit (Fobi)

This commit is contained in:
Frank Schiebel 2021-07-12 14:04:20 +02:00
commit 2bff291a51
336 changed files with 88781 additions and 0 deletions

225
graph/Kante.java Normal file
View file

@ -0,0 +1,225 @@
package graph;
import java.util.List;
import java.util.Arrays;
/**
* Die Klasse Kante beschreibt die Datenstruktur einer Kante, bestehend aus Startknoten, Gewicht und Zielknoten.
* Da Kanten innerhalb von Adjazenzlisten und -Matrizen repraesentiert werden, ist diese Klasse eigentlich unnoetig!
* Sie wurde zum Zweck der Vereinfachung - sozusagen als Zwischenspeicher von Kanten - eingefuehrt.
* Auch soll sie das Kantengewicht verwalten und Aufschluss darueber geben, ob sie gefaerbt/geloescht ist oder nicht.
*
* @author Dirk Zechnall, Thomas Schaller
* @version 22.07.2020 (v6.4)
*/
public class Kante extends GraphElement
{
private Knoten start;
private Knoten ziel;
private double gewicht;
private boolean markiert = false;
private boolean geloescht = false;
private int farbe = -1;
/**
* Der Konstruktor erstellt eine neue Kante mit Start- und Zielknoten und Kantengewicht.
* Die Kante ist zu Beginn ungefaerbt.
*
* @param neuerStart Der neue Startknoten
* @param neuerZiel Der neue Zielknoten
* @param neuesGewicht Das neue Kantengewicht
*/
public Kante (Knoten neuerStart, Knoten neuerZiel, double neuesGewicht) {
gewicht = neuesGewicht;
start = neuerStart;
ziel = neuerZiel;
}
/**
* Die Methode init initialisiert die Kantenfaerbung (auf unmarkiert)
*/
protected void init() {
markiert = false;
geloescht = false;
}
/**
* Setzt den Status einer Kante, der in einem String gespeichert ist.
* Form: markiert,geloescht,farbe
* Dabei sind markiert und geloescht boolsche Werte (0 = false, 1 = true) und
* die farbe eine Zahl
* @param status Statusstring
*/
public void setStatus(String status) {
List<String> items = Arrays.asList(status.split("\\s*,\\s*"));
this.markiert = items.get(0).equals("1");
this.geloescht = items.get(1).equals("1");
this.farbe = Integer.parseInt(items.get(2));
}
/**
* Liefert den Status einer Kante als String.
* Form: markiert,geloescht,farbe
* Dabei sind markiert und geloescht boolsche Werte (0 = false, 1 = true) und
* die farbe eine Zahl
* @return Statusstring
*/
public String getStatus() {
return ""+(markiert ? "1," : "0,")+ (geloescht ? "1," : "0,")+ farbe;
}
/**
* Setzt das Gewicht der Kante
*
* @param neuesGewicht Das neu zu setzende Gewicht
*/
public void setGewicht(double neuesGewicht) {
gewicht = neuesGewicht;
}
/**
* Gibt das Gewicht der Kante zurueck
*
* @return Gewicht der Kante
*/
public double getGewicht() {
return gewicht;
}
/**
* Setzt den Startknoten der Kante
*
* @param neuerSatrtKnoten Der neu zu setzende Startknoten
*/
public void setStart(Knoten neuerSatrtKnoten) {
start = neuerSatrtKnoten;
}
/**
* Gibt den Startknoten der Kante zurueck
*
* @return Startknoten
*/
public Knoten getStart() {
return start;
}
/**
* Setzt den Zielknoten der Kante
*
* @param neuerZielKnoten Der neu zu setzende Zielknoten
*/
public void setZiel(Knoten neuerZielKnoten) {
ziel = neuerZielKnoten;
}
/**
* Gibt den Zielknoten der Kante zurueck
*
* @return Zielknoten
*/
public Knoten getZiel() {
return ziel;
}
/**
* Gibt Knoten am anderen Ende der Kante zurueck
* @param k Knoten am ersten Ende der Kante
* @return Knoten am anderen Ende
*/
public Knoten getAnderesEnde(Knoten k) {
if (k == start) return ziel;
if (k == ziel) return start;
return null;
}
/**
* Setzt das markiert-Attribut der Kante
*
* @param wert Der neu zu setzende markiert-Wert
*/
public void setMarkiert(boolean wert) {
markiert = wert;
}
/**
* Gibt zurück, ob die Kanten markiert ist
*
* @return markiert?
*/
public boolean isMarkiert() {
return markiert;
}
/**
* Setzt das gelöscht-Attribut der Kante
*
* @param wert Der neu zu setzende gelöscht-Wert
*/
public void setGeloescht(boolean wert) {
geloescht = wert;
}
/**
* Gibt den gelöscht-Wert der Kante zurueck
*
* @return gelöscht?
*/
public boolean isGeloescht() {
return geloescht;
}
/**
* Gibt zurueck, in welcher Farbe die Kante gezeichnet werden soll.
* Ist die Farbe nicht gesetzt, dann wird eine unmarkierte Kante in Farbe 1
* und eine markierte in Farbe 2 gezeichnet.
* @return Nummer der Farbe
*/
public int getFarbe() {
if(farbe == -1) {
if(geloescht) return 2;
if(markiert) return 1;
return 0;
}
return farbe;
}
/**
* Setzt die Farbe auf einen bestimmten Farbindex
* @param farbe Index der Farbe (0-19)
*/
public void setFarbe(int farbe) {
if(farbe>=0 && farbe < 20)
this.farbe = farbe;
}
/**
* Setzt die Farbe auf die Standardfarbgebung zurück
*/
public void setStandardFarbe() {
farbe = -1;
}
/** Vergleicht die Kante mit einer anderen Kante bezüglich ihres Gewichts
* @param e andere Kante
* @return kleiner 0 die andere Kante hat ein größeres Gewicht, größer 0 die andere Kante hat ein kleineres Gewicht, gleich 0 beides sind gleich
*/
public int compareTo(GraphElement e) {
double w1, w2;
if(e instanceof Knoten) w1 = ((Knoten) e).getDoubleWert(); else w1 = ((Kante) e).getGewicht();
w2 = getGewicht();
return (int) (w2-w1);
}
/**
* Die Methode ueberschreibt die Methode toString() und gibt die String-Raepraesentation einer Kante zurueck
*
* @return String-Raepraesentation der Kante
*/
@Override
public String toString() {
return " --("+gewicht+")--> ";
}
}