graphen:breitensuche:start
Unterschiede
Hier werden die Unterschiede zwischen zwei Versionen angezeigt.
Beide Seiten der vorigen RevisionVorhergehende ÜberarbeitungNächste Überarbeitung | Vorhergehende Überarbeitung | ||
graphen:breitensuche:start [2023/10/18 08:54] – [Aufgabe 2] Martin Pabst | graphen:breitensuche:start [2023/11/05 14:11] (aktuell) – [Aufgabe 1] Martin Pabst | ||
---|---|---|---|
Zeile 104: | Zeile 104: | ||
===== Aufgabe 2 ===== | ===== Aufgabe 2 ===== | ||
- | Der Algorithmus zur Breitensuche kann auf einfache Art so abgewandelt werden, dass sich damit ermitteln lässt, ob ein Graph zusammenhängend ist oder nicht. Scheibe - ausgehend vom oben gegebenen Programm - eine Methode '' | + | Der Algorithmus zur Breitensuche kann auf einfache Art so abgewandelt werden, dass sich damit ermitteln lässt, ob ein **ungerichteter** |
+ | Du kannst als Ausgangspunkt das folgende Programmfragment benutzen: | ||
+ | < | ||
+ | <img src=" | ||
+ | <div class=" | ||
+ | |||
+ | <script type=" | ||
+ | Graph g = new Graph(8); | ||
+ | g.ungerichteteKanteHinzufügen(0, | ||
+ | g.ungerichteteKanteHinzufügen(1, | ||
+ | g.ungerichteteKanteHinzufügen(1, | ||
+ | g.ungerichteteKanteHinzufügen(2, | ||
+ | g.ungerichteteKanteHinzufügen(3, | ||
+ | g.ungerichteteKanteHinzufügen(2, | ||
+ | g.ungerichteteKanteHinzufügen(4, | ||
+ | g.ungerichteteKanteHinzufügen(3, | ||
+ | g.ungerichteteKanteHinzufügen(5, | ||
+ | g.ungerichteteKanteHinzufügen(5, | ||
+ | g.ungerichteteKanteHinzufügen(1, | ||
+ | g.ungerichteteKanteHinzufügen(6, | ||
+ | g.ungerichteteKanteHinzufügen(7, | ||
+ | g.breitensuche(1); | ||
+ | |||
+ | |||
+ | public class Graph { | ||
+ | |||
+ | | ||
+ | |||
+ | | ||
+ | adj = new int[anzahlKnoten][anzahlKnoten]; | ||
+ | } | ||
+ | |||
+ | | ||
+ | adj[vonIndex][nachIndex] = 1; | ||
+ | adj[nachIndex][vonIndex] = 1; | ||
+ | } | ||
+ | |||
+ | | ||
+ | boolean[] besucht = new boolean[adj.length]; | ||
+ | LinkedList< | ||
+ | warteschlange.addLast(start); | ||
+ | besucht[start] = true; | ||
+ | println(" | ||
+ | |||
+ | while (!warteschlange.isEmpty()) { | ||
+ | int knoten = warteschlange.removeFirst(); | ||
+ | |||
+ | for (int i = 0; i < adj.length; i++) { | ||
+ | if(adj[knoten][i] != 0 && !besucht[i]) { | ||
+ | | ||
+ | | ||
+ | | ||
+ | } | ||
+ | } | ||
+ | |||
+ | } | ||
+ | } | ||
+ | |||
+ | |||
+ | |||
+ | } | ||
+ | </ | ||
+ | |||
+ | |||
+ | </ | ||
+ | </ | ||
[[.aufgabe2Loesung: | [[.aufgabe2Loesung: | ||
Zeile 118: | Zeile 184: | ||
+ | ===== Exkurs zu Game Development: | ||
+ | <WRAP center round tip 80%> | ||
+ | Haben Sie sich schon mal gefragt, wie die Gegner in Computerspielen durch ein Wirrwarr von Labyrinthen immer den kürzesten Weg zur Spielerfigur finden? Dahinter steckt meist Lee's Algorithms, eine Variante der Breitensuche. [[.lee: | ||
+ | {{ : | ||
+ | </ | ||
graphen/breitensuche/start.1697619266.txt.gz · Zuletzt geändert: 2023/10/18 08:54 von Martin Pabst