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 abstract class GraphAlgo_DominatingSetGreedy extends GraphAlgo { /** Bestimmt besten Knoten nach Strategie */ protected abstract Knoten bestimmeBesten(); // Anfang Methoden public void fuehreAlgorithmusAus() { if (g.getAnzahlKnoten()==0) { return; } List knoten = g.getAlleKnoten(k->!k.isMarkiert() && !k.isBesucht()); info("Solange es noch nicht überdeckte Knoten gibt, wiederhole..."); int nr = 1; while(knoten.size() > 0) { info("Bestimme "+(nr++)+". hinzuzufügenden Knoten"); infoIndentMore(); Knoten bester = bestimmeBesten(); bester.setMarkiert(true); bester.setBesucht(false); info("Markiere diesen Knoten ..."); List nachbarn = g.getNachbarknoten(bester,kn->!kn.isMarkiert() && !kn.isBesucht()); for(Knoten k : nachbarn) { k.setBesucht(true); } info("... und setze alle bisher nicht überdeckten Nachbarn auf besucht"); knoten = g.getAlleKnoten(kn->!kn.isMarkiert() && !kn.isBesucht()); step(); infoIndentLess(); }// end of while nr--; melde("Dominierende Menge mit " + nr + " Knoten gefunden."); } // Ende Methoden }