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: * ein nicht abgedeckten Knoten, der von einem beliebigen schon ausgewählten Knoten die Entfernung 3 hat * * @version 1.0 from 10.12.2020 * @author Thomas Schaller */ public class GraphAlgo_DominatingSetGreedyE extends GraphAlgo_DominatingSetGreedy { // Anfang Attribute public String getBezeichnung() { return "Dominierende Menge (Greedy (e))"; } /** Bestimmt besten Knoten nach Strategie: * ein nicht abgedeckten Knoten, der von einem beliebigen schon ausgewählten Knoten die Entfernung 3 hat */ protected Knoten bestimmeBesten() { Random r= new Random(); List markierte = g.getAlleKnoten(k->k.isMarkiert() ); List nichtabgedeckte = g.getAlleKnoten(k->!k.isMarkiert() ); if(markierte.size()==0) return g.getKnoten(r.nextInt(g.getAnzahlKnoten())); List entfernung3 = new ArrayList(); List status = g.getStatus(); for(Knoten start: markierte) { info("Bestimme Entfernung von Knoten "+g.getKnoteninfo(start,false)+" zu allen anderen Knoten"); g.initialisiereAlleKnoten(); GraphAlgo moore = new GraphAlgo_Moore(); moore.setGraph(g); moore.setStartKnoten(start); moore.fuehreAlgorithmusAus(); entfernung3 = g.getAlleKnoten(k->k.getIntWert()==3); entfernung3.retainAll(nichtabgedeckte); info("Habe "+entfernung3.size()+" Knoten mit Entfernung 3 gefunden."); if(entfernung3.size()>0) break; } Knoten bester; if(entfernung3.size()>0) { info("Wähle zufällig einen von diesen"); bester = entfernung3.get(r.nextInt(entfernung3.size())); } else { info("Wählen einen zufälligen Knoten aus"); bester = nichtabgedeckte.get(r.nextInt(nichtabgedeckte.size())); } bester.setFarbe(5); step(); g.setStatus(status); return bester; } }