Unterschiede
Hier werden die Unterschiede zwischen zwei Versionen der Seite angezeigt.
Beide Seiten, vorherige Überarbeitung Vorherige Überarbeitung Nächste Überarbeitung | Vorherige Überarbeitung | ||
faecher:informatik:oberstufe:graphen:zpg:kuerzeste_pfade:kpfad_kantenzahl:start [21.11.2022 18:30] – [Quacki der Frosch] Frank Schiebel | faecher:informatik:oberstufe:graphen:zpg:kuerzeste_pfade:kpfad_kantenzahl:start [29.08.2024 14:32] (aktuell) – Marco Kuemmel | ||
---|---|---|---|
Zeile 25: | Zeile 25: | ||
++++ | ++++ | ||
+ | ----- | ||
<callout type=" | <callout type=" | ||
Problem: Kürzeste Entfernung in ungewichteten Graphen\\ | Problem: Kürzeste Entfernung in ungewichteten Graphen\\ | ||
Zeile 37: | Zeile 38: | ||
=== (A2) Angepasste Breitensuche === | === (A2) Angepasste Breitensuche === | ||
- | Das Problem kann man mit einer angepassten | + | Das Problem kann man mit einer "angepassten |
* Schreibe den Algorithmus für die Breitensuche als Pseudocode auf.((Du kannst [[faecher: | * Schreibe den Algorithmus für die Breitensuche als Pseudocode auf.((Du kannst [[faecher: | ||
Zeile 48: | Zeile 49: | ||
mit Knoten und Kanten. | mit Knoten und Kanten. | ||
++++ | ++++ | ||
+ | |||
+ | |||
+ | |||
+ | ---- | ||
+ | {{: | ||
+ | === (A3) Implementation === | ||
+ | |||
+ | Implementiere den Algorithmus der erweiterten Breitensuche (Algorithmus von Mooore) im Graphentester. | ||
+ | <btn type=" | ||
+ | |||
+ | ++++ Lösungsvorschlag | | ||
+ | <code java> | ||
+ | public void fuehreAlgorithmusAus() { | ||
+ | gr = getGraph(); | ||
+ | for(Knoten k : gr.getAlleKnoten()) { | ||
+ | k.setWert(Double.POSITIVE_INFINITY); | ||
+ | } | ||
+ | info(" | ||
+ | | ||
+ | Queue< | ||
+ | q.add(getStartKnoten()); | ||
+ | getStartKnoten().setMarkiert(true); | ||
+ | getStartKnoten().setWert(0); | ||
+ | info(" | ||
+ | | ||
+ | step(); | ||
+ | | ||
+ | while(!q.isEmpty()) { | ||
+ | Knoten v = q.remove(); | ||
+ | v.setFarbe(3); | ||
+ | v.setBesucht(true); | ||
+ | info(" | ||
+ | step(); | ||
+ | for(Knoten w: gr.getNachbarknoten(v)) { | ||
+ | if(!w.isMarkiert()) { | ||
+ | info(" | ||
+ | w.setMarkiert(true); | ||
+ | w.setWert(v.getIntWert()+1); | ||
+ | q.add(w); | ||
+ | |||
+ | step(); | ||
+ | |||
+ | info(" | ||
+ | gr.getKante(v, | ||
+ | } | ||
+ | } | ||
+ | } | ||
+ | } | ||
+ | </ | ||
+ | ++++ | ||
+ | |||
+ | ---- | ||
+ | {{ : | ||
+ | |||
+ | {{: | ||
+ | === (A4) === | ||
+ | |||
+ | Für viele Anwendungen verwendet man **gerichtete** Graphen, | ||
+ | d.h. die Kanten haben eine Richtung (z.B. bei einem | ||
+ | Stadtplan mit Einbahnstraßen). Die Kanten dürfen dann nur | ||
+ | in der vorgegebenen Richtung durchlaufen werden. | ||
+ | |||
+ | |||
+ | |||
+ | * Bestimme die Entfernungen in nebenstehendem Graphen vom markierten Knoten aus. | ||
+ | * Entscheide, ob der Algorithmus verändert werden muss, um auf gerichtete Graphen angewendet werden zu können. | ||
+ | |||
+ | Du kannst deine Ergebnisse im Graphentester nachvollziehen, | ||
+ | |||