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 [30.08.2024 10:21] – [Der Computer zieht die Fäden] Marco Kuemmel | faecher:informatik:oberstufe:graphen:zpg:kuerzeste_pfade:kpfad_dijkstra:start [19.09.2024 07:46] (aktuell) – Marco Kuemmel | ||
---|---|---|---|
Zeile 52: | 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 62: | Zeile 62: | ||
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 79: | 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 95: | 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 109: | 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 | ||
Zeile 139: | 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... | ||
{{ : | {{ : |