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:21] – [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\\ |
+ | \\ | ||
* **Eingabe: | * **Eingabe: | ||
* **Ausgabe: | * **Ausgabe: | ||
</ | </ | ||
+ | |||
+ | |||
+ | {{: | ||
+ | === (A2) Angepasste Breitensuche === | ||
+ | |||
+ | Das Problem kann man mit einer " | ||
+ | |||
+ | * Schreibe den Algorithmus für die Breitensuche als Pseudocode auf.((Du kannst [[faecher: | ||
+ | * Was kannst du ändern, um dir die " | ||
+ | |||
+ | ++++ Hilfestellung | | ||
+ | |||
+ | Wie ergibt sich die Anzahl der notwendigen Sprünge zu einem Blatt, wenn man weiß, dass man | ||
+ | zu einem benachbarten Blatt fünf Sprünge (n Sprünge) braucht? Formuliere diese Aussage auch | ||
+ | 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, | ||
+ | |||