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_dijkstra:start [23.11.2022 19:37] – [Lösungsansatz mit Pfiff] Frank Schiebel | faecher:informatik:oberstufe:graphen:zpg:kuerzeste_pfade:kpfad_dijkstra:start [19.09.2024 07:46] (aktuell) – Marco Kuemmel | ||
---|---|---|---|
Zeile 43: | Zeile 43: | ||
=== (A1) === | === (A1) === | ||
- | * Schaue dir den Film an, der den Vorgang zeigt und stelle anhand der Bewegung der Centstücke die Reihenfolge der Knotenentfernungen im Beispielgraphen auf. Überprüfe die so gefundene Reihenfolge anhand der Kantengewichte. | + | * Schaue dir den Film an, der den Vorgang zeigt und stelle anhand der Bewegung der Centstücke die Reihenfolge der Knotenentfernungen im Beispielgraphen auf (Anmerkung: Der Film ist in Zeitlupe aufgenommen, |
< | < | ||
<iframe title=" | <iframe title=" | ||
Zeile 53: | Zeile 52: | ||
===== Der Computer zieht die Fäden ===== | ===== Der Computer zieht die Fäden ===== | ||
- | Möchte man dieses | + | Möchte man dieses |
Welcher Knoten ist stets der nächste, der von der Unterlage abgehoben wird? | Welcher Knoten ist stets der nächste, der von der Unterlage abgehoben wird? | ||
Zeile 61: | Zeile 60: | ||
++++ | ++++ | ||
- | Wir benötigen also **zwei Markierungen**: | + | Wir benötigen also **zwei Markierungen**: |
- | * Knoten **Besucht**: In der ToDo-Liste, mit einem Entfernungswert versehen. | + | * Knoten **Markiert**: In der ToDo-Liste, mit einem Entfernungswert versehen. |
- | * Knoten **Markiert**: In der Luft, Wert entspricht der kürzesten Entfernung vom Startknoten | + | * Knoten **Besucht**: In der Luft, Wert entspricht der kürzesten Entfernung vom Startknoten |
- | Damit sieht ein Lückenhafter | + | Damit sieht ein lückenhafter |
< | < | ||
- | hole den startknoten, | + | hole den startknoten, |
solange die ToDo-liste nicht leer ist: | solange die ToDo-liste nicht leer ist: | ||
Zeile 80: | Zeile 79: | ||
| | ||
wenn d < wert von n ODER n nicht in der ToDo-liste | wenn d < wert von n ODER n nicht in der ToDo-liste | ||
- | // was muss dann geschehen | + | // was muss dann geschehen? |
| | ||
wenn n nicht in der ToDo-Liste: | wenn n nicht in der ToDo-Liste: | ||
Zeile 96: | Zeile 95: | ||
++++ Lösungsvorschlag | | ++++ Lösungsvorschlag | | ||
< | < | ||
- | hole den startknoten, | + | hole den startknoten, |
solange die ToDo-liste nicht leer ist: | solange die ToDo-liste nicht leer ist: | ||
sortiere die ToDo-liste aufsteigend | sortiere die ToDo-liste aufsteigend | ||
hole das kleinste element _aktuell_ aus der ToDo-liste | hole das kleinste element _aktuell_ aus der ToDo-liste | ||
- | setze aktuell auf markiert | + | setze aktuell auf besucht |
| | ||
- | für alle nachbarn n von _aktuell_, die nicht markiert | + | für alle nachbarn n von _aktuell_, die nicht besucht |
berechne die entfernung d des knotens n vom startknoten aus über den knoten _aktuell_ // wert von aktuell + abstand zum nachbarn | berechne die entfernung d des knotens n vom startknoten aus über den knoten _aktuell_ // wert von aktuell + abstand zum nachbarn | ||
| | ||
Zeile 110: | Zeile 109: | ||
| | ||
wenn n nicht in der ToDo-Liste: | wenn n nicht in der ToDo-Liste: | ||
- | markiere n als besucht | + | markiere n als markiert |
fuege n der ToDo-liste hinzu | fuege n der ToDo-liste hinzu | ||
</ | </ | ||
+ | |||
+ | Tipp: | ||
+ | * Die Entfernung zwischen zwei Knoten ist das Gewicht der Kante. Du musst also zuerst die entsprechende Kante bekommen und kannst darauf die Methode '' | ||
++++ | ++++ | ||
+ | |||
---- | ---- | ||
Zeile 120: | Zeile 123: | ||
=== (A3) === | === (A3) === | ||
- | Implementiere den Dijkstra Algorithmus im Graphentester, | + | Implementiere den Dijkstra Algorithmus im Graphentester, |
+ | |||
+ | <btn type=" | ||
---- | ---- | ||
Zeile 126: | Zeile 131: | ||
=== (A4) === | === (A4) === | ||
- | Erweitere deinen Algorithmus so, dass die kürzesten Pfade farblich hervorgehoben werden.((kante.setFarbe() )) | + | Erweitere deinen Algorithmus so, dass die kürzesten Pfade farblich hervorgehoben werden.((kante.setMarkiert(true) )) |
+ | __Achtung: | ||
---- | ---- | ||
{{: | {{: | ||
Zeile 133: | Zeile 139: | ||
Passe den Algorithmus so an, dass man im Quelltext die Knotennummer des Zielknotens angeben kann, um eine Route vom gewählten Startknoten zum Zielknoten zu berechnen. Gib die Stationen der kürzesten Route aus. Das Bild unten zeigt die Nummerierung der Knoten im Beispiel. | Passe den Algorithmus so an, dass man im Quelltext die Knotennummer des Zielknotens angeben kann, um eine Route vom gewählten Startknoten zum Zielknoten zu berechnen. Gib die Stationen der kürzesten Route aus. Das Bild unten zeigt die Nummerierung der Knoten im Beispiel. | ||
+ | |||
+ | __Tipp:__ Eine //HashMap// kann sinnvoll sein, um einen Knoten und seinen Vorgänger-Knoten zu speichern. Mach dich kurz schlau im Internet, wie man diese nutzen kann. Alternativ geht z. B. auch ein zweidimensionales Knoten-Array... | ||
{{ : | {{ : |