Präzisierung der Definitionen von Kantenzug, Pfad, Weg und Kreis

This commit is contained in:
Thomas Schaller 2025-02-12 09:18:19 +01:00
parent c254b039b3
commit 80ed6017d1
40 changed files with 83 additions and 83 deletions

Binary file not shown.

Binary file not shown.

Binary file not shown.

View file

@ -14,7 +14,7 @@ import javafx.application.Platform;
* Abstrakte Oberklasse für alle zu simulierende Algorithmen * Abstrakte Oberklasse für alle zu simulierende Algorithmen
* Diese müssen die Methode getBezeichnung(): String und fuehreAlgorithmusAus() überschreiben. * Diese müssen die Methode getBezeichnung(): String und fuehreAlgorithmusAus() überschreiben.
* *
* @version 6.7 (Dez. 2020) * @version 7.1 12.02.2025
* @author Thomas Schaller * @author Thomas Schaller
*/ */
@ -78,10 +78,9 @@ public abstract class GraphAlgo extends Thread {
/** /**
* Muss vom Algorithmus aufgerufen werden, um einen Haltepunkt zu setzen * Muss vom Algorithmus aufgerufen werden, um einen Haltepunkt zu setzen
*/ */
public void step() { public void step() throws InterruptedException {
if(gp == null) return; if(gp == null) return;
try{ try{
//System.out.println("Step");
gp.updateImage(); gp.updateImage();
aktuellerZustand = g.getStatus(); aktuellerZustand = g.getStatus();
waitforclick = true; waitforclick = true;
@ -95,9 +94,13 @@ public abstract class GraphAlgo extends Thread {
if (hilfe != null) hilfe.setReviewAllowed(false); if (hilfe != null) hilfe.setReviewAllowed(false);
g.setStatus(aktuellerZustand); g.setStatus(aktuellerZustand);
aktuellerZustand = null; aktuellerZustand = null;
if(Thread.interrupted()){
throw new InterruptedException();
}
}catch(Exception e) { }catch(Exception e) {
// Erneutes Stop, damit nicht stop während des Sleeps hier abgefangen wird. // Erneutes Stop, damit nicht stop während des Sleeps hier abgefangen wird.
stop(); //System.out.println("Step wurde unterbrochen");
throw e;
} }
} }
@ -146,17 +149,13 @@ public abstract class GraphAlgo extends Thread {
if (hilfe != null) hilfe.setReviewAllowed(false); if (hilfe != null) hilfe.setReviewAllowed(false);
fuehreAlgorithmusAus(); fuehreAlgorithmusAus();
gp.updateImage(); gp.updateImage();
// System.out.println("Algorithmus beendet"); //System.out.println("Algorithmus beendet");
} catch( ThreadDeath e){ } catch( InterruptedException e){
// System.out.println("Algorithmus vorzeitig beendet."+e); //System.out.println("Algorithmus vorzeitig beendet."+e);
} finally {
if (hilfe != null) hilfe.setReviewAllowed(true);
inArbeit = false;
} }
if (hilfe != null) hilfe.setReviewAllowed(true);
inArbeit = false;
return;
}
else
{
return;
} }
} }
// Ende Methoden // Ende Methoden
@ -184,7 +183,7 @@ public abstract class GraphAlgo extends Thread {
/** /**
* Methode für den eigentlichen Algorithmus * Methode für den eigentlichen Algorithmus
*/ */
public abstract void fuehreAlgorithmusAus(); public abstract void fuehreAlgorithmusAus() throws InterruptedException;
/** /**
* Name des Algorithmus für die Dropdown-Auswahl * Name des Algorithmus für die Dropdown-Auswahl
@ -257,3 +256,4 @@ public abstract class GraphAlgo extends Thread {
} }
} }

View file

@ -9,7 +9,7 @@ import graph.*;
* Dieser Algorithmus findet die kürzesten Pfade in einem gewichteten Graphen. * Dieser Algorithmus findet die kürzesten Pfade in einem gewichteten Graphen.
* Algorithmus: Bellman-Ford * Algorithmus: Bellman-Ford
* *
* @version 1.0 from 10.12.2020 * @version 7.1 from 12.02.2025
* @author Thomas Schaller * @author Thomas Schaller
*/ */
@ -37,7 +37,7 @@ public class GraphAlgo_BellmanFord extends GraphAlgo {
} }
// Anfang Methoden // Anfang Methoden
public void fuehreAlgorithmusAus() { public void fuehreAlgorithmusAus() throws InterruptedException {
if (g.getAnzahlKnoten()==0) { if (g.getAnzahlKnoten()==0) {
return; return;
} }

View file

@ -10,7 +10,7 @@ import graph.*;
* Dieser Algorithmus nummeriert alle Knoten des Graphen. * Dieser Algorithmus nummeriert alle Knoten des Graphen.
* Algorithmus: Breitensuche mit ToDo-Liste (Schlange) * Algorithmus: Breitensuche mit ToDo-Liste (Schlange)
* *
* @version 1.0 from 10.12.2020 * @version 7.1 from 12.02.2025
* @author Thomas Schaller * @author Thomas Schaller
*/ */
@ -23,7 +23,7 @@ public class GraphAlgo_Breitensuche extends GraphAlgo {
} }
// Anfang Methoden // Anfang Methoden
public void fuehreAlgorithmusAus() { public void fuehreAlgorithmusAus() throws InterruptedException {
if (g.getAnzahlKnoten()==0) { if (g.getAnzahlKnoten()==0) {
return; return;
} }

View file

@ -10,7 +10,7 @@ import graph.*;
* die gleiche Farbe haben und möglichst wenige Farben benutzt werden. * die gleiche Farbe haben und möglichst wenige Farben benutzt werden.
* Algorithmus: Backtracking * Algorithmus: Backtracking
* *
* @version 1.0 from 10.12.2020 * @version 7.1 from 12.02.2025
* @author Thomas Schaller * @author Thomas Schaller
*/ */
@ -25,7 +25,7 @@ public class GraphAlgo_ColoringBacktracking extends GraphAlgo {
} }
// Anfang Methoden // Anfang Methoden
public void fuehreAlgorithmusAus() { public void fuehreAlgorithmusAus() throws InterruptedException {
if (g.getAnzahlKnoten()==0) { if (g.getAnzahlKnoten()==0) {
return; return;
} }
@ -35,7 +35,7 @@ public class GraphAlgo_ColoringBacktracking extends GraphAlgo {
step(); step();
} }
private void bestimmeColoring(int benutzteFarben) { private void bestimmeColoring(int benutzteFarben) throws InterruptedException {
int min = Integer.MAX_VALUE; int min = Integer.MAX_VALUE;
List<Knoten> knoten = g.getAlleKnoten(k->k.getFarbe()<=0); List<Knoten> knoten = g.getAlleKnoten(k->k.getFarbe()<=0);

View file

@ -9,7 +9,7 @@ import graph.*;
* die gleiche Farbe haben und möglichst wenige Farben benutzt werden. * die gleiche Farbe haben und möglichst wenige Farben benutzt werden.
* Algorithmus: Näherungslösung mit Greedy-Algorithmus * Algorithmus: Näherungslösung mit Greedy-Algorithmus
* *
* @version 1.0 from 10.12.2020 * @version 7.1 from 12.02.2025
* @author Thomas Schaller * @author Thomas Schaller
*/ */
public class GraphAlgo_ColoringGreedy extends GraphAlgo { public class GraphAlgo_ColoringGreedy extends GraphAlgo {
@ -26,7 +26,7 @@ public class GraphAlgo_ColoringGreedy extends GraphAlgo {
// Ende Attribute // Ende Attribute
// Anfang Methoden // Anfang Methoden
public void fuehreAlgorithmusAus() { public void fuehreAlgorithmusAus() throws InterruptedException {
List<Knoten> knoten = g.getAlleKnoten(); List<Knoten> knoten = g.getAlleKnoten();
info("Wiederhole für jeden Knoten"); info("Wiederhole für jeden Knoten");
for (Knoten aktuellerKnoten: knoten ) { for (Knoten aktuellerKnoten: knoten ) {

View file

@ -10,7 +10,7 @@ import graph.*;
* die gleiche Farbe haben und möglichst wenige Farben benutzt werden. * die gleiche Farbe haben und möglichst wenige Farben benutzt werden.
* Algorithmus: Näherungslösung mit Greedy-Algorithmus (Knotenreihenfolge zufällig) * Algorithmus: Näherungslösung mit Greedy-Algorithmus (Knotenreihenfolge zufällig)
* *
* @version 1.0 from 10.12.2020 * @version 7.1 from 12.02.2025
* @author Thomas Schaller * @author Thomas Schaller
*/ */
@ -28,7 +28,7 @@ public class GraphAlgo_ColoringGreedyRandom extends GraphAlgo {
// Ende Attribute // Ende Attribute
// Anfang Methoden // Anfang Methoden
public void fuehreAlgorithmusAus() { public void fuehreAlgorithmusAus() throws InterruptedException {
List<Knoten> knoten = g.getAlleKnoten(); List<Knoten> knoten = g.getAlleKnoten();
Collections.shuffle(knoten); Collections.shuffle(knoten);
info("Wiederhole für jeden Knoten"); info("Wiederhole für jeden Knoten");

View file

@ -10,7 +10,7 @@ import graph.*;
* Dieser Algorithmus findet die kürzesten Pfade in einem gewichteten Graphen. * Dieser Algorithmus findet die kürzesten Pfade in einem gewichteten Graphen.
* Algorithmus: Dijkstra * Algorithmus: Dijkstra
* *
* @version 1.0 from 10.12.2020 * @version 7.1 from 12.02.2025
* @author Thomas Schaller * @author Thomas Schaller
*/ */
@ -31,7 +31,7 @@ public class GraphAlgo_Dijkstra extends GraphAlgo {
} }
// Anfang Methoden // Anfang Methoden
public void fuehreAlgorithmusAus() { public void fuehreAlgorithmusAus() throws InterruptedException {
if (g.getAnzahlKnoten()==0) { if (g.getAnzahlKnoten()==0) {
return; return;
} }

View file

@ -11,7 +11,7 @@ import graph.*;
* Dieser Algorithmus findet die kürzesten Pfade in einem gewichteten Graphen. * Dieser Algorithmus findet die kürzesten Pfade in einem gewichteten Graphen.
* Algorithmus: Dijkstra * Algorithmus: Dijkstra
* *
* @version 1.0 from 10.12.2020 * @version 7.1 from 12.02.2025
* @author Thomas Schaller * @author Thomas Schaller
*/ */
@ -34,7 +34,7 @@ public class GraphAlgo_DijkstraMitVorgaenger extends GraphAlgo {
gp.getGraphOptions().knotenLangtext = new String[]{"Infotext","Entfernung","Vorgänger","Markiert","Besucht"}; gp.getGraphOptions().knotenLangtext = new String[]{"Infotext","Entfernung","Vorgänger","Markiert","Besucht"};
} }
public void fuehreAlgorithmusAus() { public void fuehreAlgorithmusAus() throws InterruptedException {
if (g.getAnzahlKnoten()==0) { if (g.getAnzahlKnoten()==0) {
return; return;
} }

View file

@ -10,7 +10,7 @@ import graph.*;
* und bestimmt den Zeitbedarf. * und bestimmt den Zeitbedarf.
* Algorithmus: Backtracking * Algorithmus: Backtracking
* *
* @version 1.0 from 10.12.2020 * @version 7.1 from 12.02.2025
* @author Thomas Schaller * @author Thomas Schaller
*/ */
@ -26,7 +26,7 @@ public class GraphAlgo_DominatingSetBacktracking extends GraphAlgo {
// Anfang Methoden // Anfang Methoden
public void fuehreAlgorithmusAus() { public void fuehreAlgorithmusAus() throws InterruptedException {
long starttime = System.currentTimeMillis(); long starttime = System.currentTimeMillis();
if (g.getAnzahlKnoten()==0) { if (g.getAnzahlKnoten()==0) {
return; return;
@ -41,7 +41,7 @@ public class GraphAlgo_DominatingSetBacktracking extends GraphAlgo {
private void bestimmeDominierendeMenge(int knoten) { private void bestimmeDominierendeMenge(int knoten) throws InterruptedException {
List<String> status = g.getStatus(); List<String> status = g.getStatus();
List<Knoten> markierte = g.getAlleKnoten(kn->kn.isMarkiert()); List<Knoten> markierte = g.getAlleKnoten(kn->kn.isMarkiert());

View file

@ -11,7 +11,7 @@ import graph.*;
* Dieser Algorithmus bestimmt die kleinste dominierende Menge in einem Graphen * Dieser Algorithmus bestimmt die kleinste dominierende Menge in einem Graphen
* und bestimmt den Zeitbedarf. * und bestimmt den Zeitbedarf.
* Algorithmus: Genetischer Algorithmus * Algorithmus: Genetischer Algorithmus
* @version 1.0 from 10.12.2020 * @version 7.1 from 12.02.2025
* @author Thomas Schaller * @author Thomas Schaller
*/ */
@ -31,7 +31,7 @@ public class GraphAlgo_DominatingSetGenetisch extends GraphAlgo {
// Anfang Methoden // Anfang Methoden
public void fuehreAlgorithmusAus() { public void fuehreAlgorithmusAus() throws InterruptedException {
population = new int[popGroesse][g.getAnzahlKnoten()]; population = new int[popGroesse][g.getAnzahlKnoten()];
double[] bewertungen = new double[popGroesse]; double[] bewertungen = new double[popGroesse];
for(int i=0; i<popGroesse; i++) { for(int i=0; i<popGroesse; i++) {

View file

@ -14,7 +14,7 @@ import graph.*;
* Algorithmus: Greedy mit Strategie: * Algorithmus: Greedy mit Strategie:
* Nimm den Knoten mit den meisten Nachbarn * Nimm den Knoten mit den meisten Nachbarn
* *
* @version 1.0 from 10.12.2020 * @version 7.1 from 12.02.2025
* @author Thomas Schaller * @author Thomas Schaller
*/ */
@ -48,7 +48,7 @@ public class GraphAlgo_DominatingSetGreedyA extends GraphAlgo {
} }
// Anfang Methoden // Anfang Methoden
public void fuehreAlgorithmusAus() { public void fuehreAlgorithmusAus() throws InterruptedException {
if (g.getAnzahlKnoten()==0) { if (g.getAnzahlKnoten()==0) {
return; return;
} }

View file

@ -13,7 +13,7 @@ import graph.*;
* und bestimmt den Zeitbedarf. * und bestimmt den Zeitbedarf.
* Algorithmus: Greedy mit Strategie: * Algorithmus: Greedy mit Strategie:
* Nimm den Knoten mit den wenigsten Nachbarn * Nimm den Knoten mit den wenigsten Nachbarn
* @version 1.0 from 10.12.2020 * @version 7.1 from 12.02.2025
* @author Thomas Schaller * @author Thomas Schaller
*/ */
@ -47,7 +47,7 @@ public class GraphAlgo_DominatingSetGreedyB extends GraphAlgo {
} }
// Anfang Methoden // Anfang Methoden
public void fuehreAlgorithmusAus() { public void fuehreAlgorithmusAus() throws InterruptedException {
if (g.getAnzahlKnoten()==0) { if (g.getAnzahlKnoten()==0) {
return; return;
} }

View file

@ -14,7 +14,7 @@ import graph.*;
* Algorithmus: Greedy mit Strategie: * Algorithmus: Greedy mit Strategie:
* Nimm den Knoten mit den meisten Nachbarn * Nimm den Knoten mit den meisten Nachbarn
* *
* @version 1.0 from 10.12.2020 * @version 7.1 from 12.02.2025
* @author Thomas Schaller * @author Thomas Schaller
*/ */
@ -29,7 +29,7 @@ public class GraphAlgo_DominatingSetGreedyC extends GraphAlgo {
/** Bestimmt besten Knoten nach Strategie: /** Bestimmt besten Knoten nach Strategie:
* Nimm den Knoten mit den meisten Nachbarn * Nimm den Knoten mit den meisten Nachbarn
*/ */
private Knoten bestimmeBesten() { private Knoten bestimmeBesten() {
List<Knoten> knoten = g.getAlleKnoten(k->!k.isMarkiert()); List<Knoten> knoten = g.getAlleKnoten(k->!k.isMarkiert());
info("Wiederhole für jeden noch nicht markierten Knoten"); info("Wiederhole für jeden noch nicht markierten Knoten");
@ -49,7 +49,7 @@ public class GraphAlgo_DominatingSetGreedyC extends GraphAlgo {
} }
// Anfang Methoden // Anfang Methoden
public void fuehreAlgorithmusAus() { public void fuehreAlgorithmusAus() throws InterruptedException {
if (g.getAnzahlKnoten()==0) { if (g.getAnzahlKnoten()==0) {
return; return;
} }

View file

@ -14,7 +14,7 @@ import graph.*;
* Algorithmus: Greedy mit Strategie: * Algorithmus: Greedy mit Strategie:
* Nimm den Knoten mit den meisten Nachbarn * Nimm den Knoten mit den meisten Nachbarn
* *
* @version 1.0 from 10.12.2020 * @version 7.1 from 12.02.2025
* @author Thomas Schaller * @author Thomas Schaller
*/ */
@ -49,7 +49,7 @@ public class GraphAlgo_DominatingSetGreedyD extends GraphAlgo {
} }
// Anfang Methoden // Anfang Methoden
public void fuehreAlgorithmusAus() { public void fuehreAlgorithmusAus() throws InterruptedException {
if (g.getAnzahlKnoten()==0) { if (g.getAnzahlKnoten()==0) {
return; return;
} }

View file

@ -14,7 +14,7 @@ import graph.*;
* Algorithmus: Greedy mit Strategie: * Algorithmus: Greedy mit Strategie:
* ein nicht abgedeckten Knoten, der von einem beliebigen schon ausgewählten Knoten die Entfernung 3 hat * ein nicht abgedeckten Knoten, der von einem beliebigen schon ausgewählten Knoten die Entfernung 3 hat
* *
* @version 1.0 from 10.12.2020 * @version 7.1 from 12.02.2025
* @author Thomas Schaller * @author Thomas Schaller
*/ */
@ -30,7 +30,7 @@ public class GraphAlgo_DominatingSetGreedyE extends GraphAlgo {
* ein nicht abgedeckten Knoten, der von einem beliebigen schon ausgewählten Knoten die Entfernung 3 hat * ein nicht abgedeckten Knoten, der von einem beliebigen schon ausgewählten Knoten die Entfernung 3 hat
*/ */
private Knoten bestimmeBesten() { private Knoten bestimmeBesten() throws InterruptedException {
Random r= new Random(); Random r= new Random();
List<Knoten> markierte = g.getAlleKnoten(k->k.isMarkiert() ); List<Knoten> markierte = g.getAlleKnoten(k->k.isMarkiert() );
@ -68,7 +68,7 @@ public class GraphAlgo_DominatingSetGreedyE extends GraphAlgo {
} }
// Anfang Methoden // Anfang Methoden
public void fuehreAlgorithmusAus() { public void fuehreAlgorithmusAus() throws InterruptedException {
if (g.getAnzahlKnoten()==0) { if (g.getAnzahlKnoten()==0) {
return; return;
} }

View file

@ -14,7 +14,7 @@ import graph.*;
* Algorithmus: Greedy mit Strategie: * Algorithmus: Greedy mit Strategie:
* ein nicht abgedeckten Knoten, der von einem beliebigen schon ausgewählten Knoten die Entfernung 3 hat * ein nicht abgedeckten Knoten, der von einem beliebigen schon ausgewählten Knoten die Entfernung 3 hat
* *
* @version 1.0 from 10.12.2020 * @version 7.1 from 12.02.2025
* @author Thomas Schaller * @author Thomas Schaller
*/ */
@ -30,7 +30,7 @@ public class GraphAlgo_DominatingSetGreedyF extends GraphAlgo {
* ein nicht abgedeckten Knoten, der von einem beliebigen schon ausgewählten Knoten die Entfernung 3 hat * ein nicht abgedeckten Knoten, der von einem beliebigen schon ausgewählten Knoten die Entfernung 3 hat
*/ */
private Knoten bestimmeBesten() { private Knoten bestimmeBesten() throws InterruptedException {
Random r= new Random(); Random r= new Random();
List<Knoten> markierte = g.getAlleKnoten(k->k.isMarkiert() ); List<Knoten> markierte = g.getAlleKnoten(k->k.isMarkiert() );
@ -68,7 +68,7 @@ public class GraphAlgo_DominatingSetGreedyF extends GraphAlgo {
} }
// Anfang Methoden // Anfang Methoden
public void fuehreAlgorithmusAus() { public void fuehreAlgorithmusAus() throws InterruptedException {
if (g.getAnzahlKnoten()==0) { if (g.getAnzahlKnoten()==0) {
return; return;
} }

View file

@ -14,7 +14,7 @@ import graph.*;
* Algorithmus: Greedy mit Strategie: * Algorithmus: Greedy mit Strategie:
* ein nicht abgedeckten Knoten, der von einem beliebigen schon ausgewählten Knoten die Entfernung 3 hat * ein nicht abgedeckten Knoten, der von einem beliebigen schon ausgewählten Knoten die Entfernung 3 hat
* *
* @version 1.0 from 10.12.2020 * @version 7.1 from 12.02.2025
* @author Thomas Schaller * @author Thomas Schaller
*/ */
@ -30,7 +30,7 @@ public class GraphAlgo_DominatingSetGreedyG extends GraphAlgo {
* ein nicht abgedeckten Knoten, der von einem beliebigen schon ausgewählten Knoten die Entfernung 3 hat * ein nicht abgedeckten Knoten, der von einem beliebigen schon ausgewählten Knoten die Entfernung 3 hat
*/ */
private Knoten bestimmeBesten() { private Knoten bestimmeBesten() throws InterruptedException {
Random r= new Random(); Random r= new Random();
List<Knoten> markierte = g.getAlleKnoten(k->k.isMarkiert() ); List<Knoten> markierte = g.getAlleKnoten(k->k.isMarkiert() );
@ -68,7 +68,7 @@ public class GraphAlgo_DominatingSetGreedyG extends GraphAlgo {
} }
// Anfang Methoden // Anfang Methoden
public void fuehreAlgorithmusAus() { public void fuehreAlgorithmusAus() throws InterruptedException {
if (g.getAnzahlKnoten()==0) { if (g.getAnzahlKnoten()==0) {
return; return;
} }

View file

@ -14,7 +14,7 @@ import graph.*;
* Algorithmus: Greedy mit Strategie: * Algorithmus: Greedy mit Strategie:
* ein nicht abgedeckten Knoten, der von möglichst vielen schon ausgewählten Knoten die Entfernung 3 hat * ein nicht abgedeckten Knoten, der von möglichst vielen schon ausgewählten Knoten die Entfernung 3 hat
* *
* @version 1.0 from 10.12.2020 * @version 7.1 from 12.02.2025
* @author Thomas Schaller * @author Thomas Schaller
*/ */
@ -29,7 +29,7 @@ public class GraphAlgo_DominatingSetGreedyH extends GraphAlgo {
/** Bestimmt besten Knoten nach Strategie: /** Bestimmt besten Knoten nach Strategie:
* ein nicht abgedeckten Knoten, der von möglichst vielen schon ausgewählten Knoten die Entfernung 3 hat * ein nicht abgedeckten Knoten, der von möglichst vielen schon ausgewählten Knoten die Entfernung 3 hat
*/ */
private Knoten bestimmeBesten() { private Knoten bestimmeBesten() throws InterruptedException {
Random r = new Random(); Random r = new Random();
List<Knoten> markierte = g.getAlleKnoten(k->k.isMarkiert() ); List<Knoten> markierte = g.getAlleKnoten(k->k.isMarkiert() );
List<Knoten> nichtabgedeckte = g.getAlleKnoten(k->!k.isMarkiert() && !k.isBesucht() ); List<Knoten> nichtabgedeckte = g.getAlleKnoten(k->!k.isMarkiert() && !k.isBesucht() );
@ -71,7 +71,7 @@ public class GraphAlgo_DominatingSetGreedyH extends GraphAlgo {
} }
// Anfang Methoden // Anfang Methoden
public void fuehreAlgorithmusAus() { public void fuehreAlgorithmusAus() throws InterruptedException {
if (g.getAnzahlKnoten()==0) { if (g.getAnzahlKnoten()==0) {
return; return;
} }

View file

@ -14,7 +14,7 @@ import graph.*;
* Algorithmus: Greedy mit Strategie: * Algorithmus: Greedy mit Strategie:
* ein nicht abgedeckten Knoten, der von den ausgewählten Knoten eine möglichst große Entfernung hat * ein nicht abgedeckten Knoten, der von den ausgewählten Knoten eine möglichst große Entfernung hat
* *
* @version 1.0 from 10.12.2020 * @version 7.1 from 12.02.2025
* @author Thomas Schaller * @author Thomas Schaller
*/ */
@ -30,7 +30,7 @@ public class GraphAlgo_DominatingSetGreedyI extends GraphAlgo {
* ein nicht abgedeckten Knoten, der von den ausgewählten Knoten eine möglichst große Entfernung hat * ein nicht abgedeckten Knoten, der von den ausgewählten Knoten eine möglichst große Entfernung hat
*/ */
private Knoten bestimmeBesten() { private Knoten bestimmeBesten() throws InterruptedException {
Random r = new Random(); Random r = new Random();
List<Knoten> markierte = g.getAlleKnoten(k->k.isMarkiert() ); List<Knoten> markierte = g.getAlleKnoten(k->k.isMarkiert() );
List<Knoten> nichtabgedeckte = g.getAlleKnoten(k->!k.isMarkiert() && !k.isBesucht() ); List<Knoten> nichtabgedeckte = g.getAlleKnoten(k->!k.isMarkiert() && !k.isBesucht() );
@ -84,7 +84,7 @@ public class GraphAlgo_DominatingSetGreedyI extends GraphAlgo {
// Anfang Methoden // Anfang Methoden
public void fuehreAlgorithmusAus() { public void fuehreAlgorithmusAus() throws InterruptedException {
if (g.getAnzahlKnoten()==0) { if (g.getAnzahlKnoten()==0) {
return; return;
} }

View file

@ -8,7 +8,7 @@ import graph.*;
* Algorithmus: Zunächst wird auf geraden Grad der Knoten getestet, danach * Algorithmus: Zunächst wird auf geraden Grad der Knoten getestet, danach
* mit Tiefensuche der Zusammenhang des Graphen überprüft. * mit Tiefensuche der Zusammenhang des Graphen überprüft.
* *
* @version 1.0 from 10.12.2020 * @version 7.1 from 12.02.2025
* @author Thomas Schaller * @author Thomas Schaller
*/ */
@ -18,7 +18,7 @@ public class GraphAlgo_EulerkreisExistenz extends GraphAlgo {
return "Eulerkreis (Existenz)"; return "Eulerkreis (Existenz)";
} }
public void fuehreAlgorithmusAus() { public void fuehreAlgorithmusAus() throws InterruptedException {
if (g.getAnzahlKnoten()==0) { if (g.getAnzahlKnoten()==0) {
return; return;
} }

View file

@ -25,7 +25,7 @@ public class GraphAlgo_MST_Kruskal extends GraphAlgo {
// Anfang Methoden // Anfang Methoden
public void fuehreAlgorithmusAus() { public void fuehreAlgorithmusAus() throws InterruptedException {
int farbe = 1; int farbe = 1;
List<Kante> kanten = g.getAlleKanten(); List<Kante> kanten = g.getAlleKanten();
List<Knoten> knoten = g.getAlleKnoten(); List<Knoten> knoten = g.getAlleKnoten();

View file

@ -24,7 +24,7 @@ public class GraphAlgo_MST_Prim extends GraphAlgo {
return "MST (Prim)"; return "MST (Prim)";
} }
public void fuehreAlgorithmusAus() { public void fuehreAlgorithmusAus() throws InterruptedException {
int markiert = 0; int markiert = 0;
List<Knoten> knoten; List<Knoten> knoten;
List<Kante> kanten; List<Kante> kanten;

View file

@ -10,7 +10,7 @@ import graph.*;
* Dieser Algorithmus findet die kürzesten Pfade in einem ungewichteten Graphen. * Dieser Algorithmus findet die kürzesten Pfade in einem ungewichteten Graphen.
* Algorithmus: Algorithmus A von Moore * Algorithmus: Algorithmus A von Moore
* *
* @version 1.0 from 10.12.2020 * @version 7.1 from 12.02.2025
* @author Thomas Schaller * @author Thomas Schaller
*/ */
@ -23,7 +23,7 @@ public class GraphAlgo_Moore extends GraphAlgo {
} }
// Anfang Methoden // Anfang Methoden
public void fuehreAlgorithmusAus() { public void fuehreAlgorithmusAus() throws InterruptedException {
if (g.getAnzahlKnoten()==0) { if (g.getAnzahlKnoten()==0) {
return; return;
} }

View file

@ -32,7 +32,7 @@ public class GraphAlgo_TSPBacktracking extends GraphAlgo {
// Anfang Methoden // Anfang Methoden
public void fuehreAlgorithmusAus() { public void fuehreAlgorithmusAus() throws InterruptedException {
start = this.getStartKnoten(); start = this.getStartKnoten();
probiere(start); probiere(start);
g.setStatus(besteLoesung); g.setStatus(besteLoesung);
@ -40,7 +40,7 @@ public class GraphAlgo_TSPBacktracking extends GraphAlgo {
melde("beste Route gefunden:" +getInfo()); melde("beste Route gefunden:" +getInfo());
} // end of for } // end of for
public void probiere(Knoten akt) { public void probiere(Knoten akt) throws InterruptedException {
boolean fertig = true; boolean fertig = true;
infoIndentMore(); infoIndentMore();
akt.setMarkiert(true); akt.setMarkiert(true);

View file

@ -30,7 +30,7 @@ public class GraphAlgo_TSPGenetisch extends GraphAlgo {
} }
// Anfang Methoden // Anfang Methoden
public void fuehreAlgorithmusAus() { public void fuehreAlgorithmusAus() throws InterruptedException {
population = new int[popGroesse][g.getAnzahlKnoten()+1]; population = new int[popGroesse][g.getAnzahlKnoten()+1];
double[] rundreiseLaenge = new double[popGroesse]; double[] rundreiseLaenge = new double[popGroesse];
for(int i=0; i<popGroesse; i++) { for(int i=0; i<popGroesse; i++) {

View file

@ -28,7 +28,7 @@ public class GraphAlgo_TSPGreedy extends GraphAlgo {
// Anfang Methoden // Anfang Methoden
public void fuehreAlgorithmusAus() { public void fuehreAlgorithmusAus() throws InterruptedException {
Knoten start = this.getStartKnoten(); Knoten start = this.getStartKnoten();
Knoten akt = start; Knoten akt = start;
Kante min; Kante min;

View file

@ -29,7 +29,7 @@ public class GraphAlgo_TSPGreedy2 extends GraphAlgo {
} }
// Anfang Methoden // Anfang Methoden
public void fuehreAlgorithmusAus() { public void fuehreAlgorithmusAus() throws InterruptedException {
int farbe = 1; int farbe = 1;
int anzkanten = 0; int anzkanten = 0;
List<Kante> kanten = g.getAlleKanten(); List<Kante> kanten = g.getAlleKanten();

View file

@ -27,7 +27,7 @@ public class GraphAlgo_TSPGreedyOpt extends GraphAlgo {
} }
// Anfang Methoden // Anfang Methoden
public void fuehreAlgorithmusAus() { public void fuehreAlgorithmusAus() throws InterruptedException {
Knoten start = this.getStartKnoten(); Knoten start = this.getStartKnoten();
Knoten akt = start; Knoten akt = start;
List<Knoten> reihung = new ArrayList<Knoten>(); List<Knoten> reihung = new ArrayList<Knoten>();

View file

@ -10,7 +10,7 @@ import graph.*;
* Dieser Algorithmus nummeriert alle Knoten des Graphen. * Dieser Algorithmus nummeriert alle Knoten des Graphen.
* Algorithmus: Tiefensuche mit ToDo-Liste (Stapel) * Algorithmus: Tiefensuche mit ToDo-Liste (Stapel)
* *
* @version 1.0 from 10.12.2020 * @version 7.1 from 12.02.2025
* @author Thomas Schaller * @author Thomas Schaller
*/ */
@ -24,7 +24,7 @@ public class GraphAlgo_Tiefensuche extends GraphAlgo {
// Anfang Methoden // Anfang Methoden
public void fuehreAlgorithmusAus() { public void fuehreAlgorithmusAus() throws InterruptedException {
if (g.getAnzahlKnoten()==0) { if (g.getAnzahlKnoten()==0) {
return; return;
} }

View file

@ -10,7 +10,7 @@ import graph.*;
* Dieser Algorithmus nummeriert alle Knoten des Graphen. * Dieser Algorithmus nummeriert alle Knoten des Graphen.
* Algorithmus: Tiefensuche rekursiv * Algorithmus: Tiefensuche rekursiv
* *
* @version 1.0 from 10.12.2020 * @version 7.1 from 12.02.2025
* @author Thomas Schaller * @author Thomas Schaller
*/ */
@ -24,14 +24,14 @@ public class GraphAlgo_TiefensucheRek extends GraphAlgo {
// Anfang Methoden // Anfang Methoden
public void fuehreAlgorithmusAus() { public void fuehreAlgorithmusAus() throws InterruptedException {
if (g.getAnzahlKnoten()==0) { if (g.getAnzahlKnoten()==0) {
return; return;
} }
nummeriere(getStartKnoten(), 0); nummeriere(getStartKnoten(), 0);
} // end } // end
private int nummeriere(Knoten k, int nr) { private int nummeriere(Knoten k, int nr) throws InterruptedException {
// Abbruchbedingung // Abbruchbedingung
if(k.isBesucht()) { if(k.isBesucht()) {
info("Untersuche "+g.getKnoteninfo(k,false)+" => ist schon besucht"); info("Untersuche "+g.getKnoteninfo(k,false)+" => ist schon besucht");

View file

@ -10,7 +10,7 @@ import graph.*;
* Er sucht einen Zyklus im Graphen. * Er sucht einen Zyklus im Graphen.
* Algorithmus: Backtracking * Algorithmus: Backtracking
* *
* @version 1.0 from 10.12.2020 * @version 7.1 from 12.02.2025
* @author Thomas Schaller * @author Thomas Schaller
*/ */
@ -22,13 +22,13 @@ public class GraphAlgo_ZyklusBacktracking extends GraphAlgo {
return "Zyklensuche (Backtracking)"; return "Zyklensuche (Backtracking)";
} }
public void fuehreAlgorithmusAus() { public void fuehreAlgorithmusAus() throws InterruptedException {
List<String> loesung = backtracking(getStartKnoten()); List<String> loesung = backtracking(getStartKnoten());
if(loesung != null) g.setStatus(loesung); if(loesung != null) g.setStatus(loesung);
step(); step();
} }
public List<String> backtracking(Knoten k){ public List<String> backtracking(Knoten k) throws InterruptedException {
List<String> loesung = null; List<String> loesung = null;

View file

@ -8,7 +8,7 @@ import graph.*;
/** /**
* Dieser Algorithmus findet eine topologische Sortierung des Graphen. * Dieser Algorithmus findet eine topologische Sortierung des Graphen.
* *
* @version 1.0 from 10.12.2020 * @version 7.1 from 12.02.2025
* @author Thomas Schaller * @author Thomas Schaller
*/ */
@ -23,7 +23,7 @@ public class GraphAlgo_toplogischeSortierung extends GraphAlgo {
// Anfang Methoden // Anfang Methoden
public void fuehreAlgorithmusAus() { public void fuehreAlgorithmusAus() throws InterruptedException {
String reihenfolge = ""; String reihenfolge = "";
if (g.getAnzahlKnoten()==0) { if (g.getAnzahlKnoten()==0) {
return; return;

View file

@ -1,5 +1,5 @@
# Anzeigeoptionen:# Gewichte anzeigen 1, Gewichte nicht anzeigen 0 # Anzeigeoptionen:# Gewichte anzeigen 1, Gewichte nicht anzeigen 0
showWeights,0 showWeights,1
# Knoteninfo anzeigen 1,Knoteninfo nicht anzeigen 0 # Knoteninfo anzeigen 1,Knoteninfo nicht anzeigen 0
showInfoText,1 showInfoText,1
# Knoten leer 0, Knotenname anzeigen 1, Wert des Knoten anzeigen 2 # Knoten leer 0, Knotenname anzeigen 1, Wert des Knoten anzeigen 2

Can't render this file because it contains an unexpected character in line 7 and column 33.

View file

@ -1,5 +1,5 @@
# Anzeigeoptionen:# Gewichte anzeigen 1, Gewichte nicht anzeigen 0 # Anzeigeoptionen:# Gewichte anzeigen 1, Gewichte nicht anzeigen 0
showWeights,0 showWeights,1
# Knoteninfo anzeigen 1,Knoteninfo nicht anzeigen 0 # Knoteninfo anzeigen 1,Knoteninfo nicht anzeigen 0
showInfoText,1 showInfoText,1
# Knoten leer 0, Knotenname anzeigen 1, Wert des Knoten anzeigen 2 # Knoten leer 0, Knotenname anzeigen 1, Wert des Knoten anzeigen 2

Can't render this file because it contains an unexpected character in line 7 and column 33.

Binary file not shown.