mirror of
https://codeberg.org/qg-info-unterricht/zpg-graphentester.git
synced 2026-03-24 20:48:26 +01:00
51 lines
1.6 KiB
Java
51 lines
1.6 KiB
Java
package algorithmen;
|
|
|
|
import java.util.List;
|
|
import java.util.ArrayList;
|
|
import java.util.Collections;
|
|
import java.util.Comparator;
|
|
import java.nio.file.*;
|
|
import java.util.Random;
|
|
|
|
import graph.*;
|
|
/**
|
|
* Dieser Algorithmus bestimmt die kleinste dominierende Menge in einem Graphen
|
|
* und bestimmt den Zeitbedarf.
|
|
* Algorithmus: Greedy mit Strategie:
|
|
* Nimm den Knoten mit den meisten Nachbarn
|
|
*
|
|
* @version 1.0 from 10.12.2020
|
|
* @author Thomas Schaller
|
|
*/
|
|
|
|
public class GraphAlgo_DominatingSetGreedyD extends GraphAlgo_DominatingSetGreedy {
|
|
|
|
// Anfang Attribute
|
|
|
|
public String getBezeichnung() {
|
|
return "Dominierende Menge (Greedy (d))";
|
|
}
|
|
|
|
/** Bestimmt besten Knoten nach Strategie:
|
|
* Nimm den Knoten mit den meisten Nachbarn
|
|
*/
|
|
protected Knoten bestimmeBesten() {
|
|
List<Knoten> knoten = g.getAlleKnoten(k->!k.isMarkiert());
|
|
|
|
info("Wiederhole für jeden noch nicht markierten Knoten");
|
|
infoIndentMore();
|
|
for(Knoten k : knoten) {
|
|
List<Knoten> nachbarn = g.getNachbarknoten(k, kn -> !kn.isMarkiert() && !kn.isBesucht());
|
|
k.setWert(nachbarn.size());
|
|
if(!k.isMarkiert() && !k.isBesucht()) k.setWert(k.getIntWert()+1);
|
|
info("Setze Wert von Knoten Nr. "+g.getNummer(k)+" auf "+nachbarn.size()+" neu überdeckte Knoten");
|
|
}
|
|
infoIndentLess();
|
|
info("Sortiere die Liste");
|
|
knoten.sort(Comparator.comparing(Knoten::getIntWert));
|
|
Knoten bester = knoten.get(0);
|
|
info("Nimm den Knoten mit den wenigsten neu überdeckten Knoten => Knoten Nr. "+g.getNummer(bester));
|
|
return bester;
|
|
}
|
|
|
|
}
|