Autor Beitrag
dennismijo
Hält's aus hier
Beiträge: 9



BeitragVerfasst: Do 01.01.09 17:19 
Hallo!
Ich stehe gerade vor folgendem Problem:

Aufgabe ist es, den kürzesten Weg zwischen zwei Punkten zu finden.

Bild:
img60.imageshack.us/...mage=algorithgr3.png

Angenommen ich möchte von Punkt [0, 0] zu Punkt [3, 3]. Wie könnte ich vor gehen?
Schwarze Felder sind "Tote Felder" und dürfen nicht berührt werden.
Jeder Punkt (nicht wenn sie am Rand liegen) hat 6 Verbindungen zum nächsten. (Unten, oben, links, rechts, unten rechts, oben links).Wie könnte man die einzelnen Verbindungen Gewichten?

Inwiefern ist mir der Dijskra-Algorithmus eine Hilfe und wie könnte man diesen ggf. anwenden?

Hat jemand von Euch irgendwelche Vorschläge?Pseudocodes o.ä?

Vielen Dank, Frohes Neues!

Lg Dennis
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19314
Erhaltene Danke: 1747

W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: Do 01.01.09 17:26 
Da du hier keine Kantengewichte hast, könntest du einfach eine Breitensuche durchführen. Dijkstra und Bellman-Ford braucht man eher bei gewichteten Graphen.
de.wikipedia.org/wiki/Breitensuche
dennismijo Threadstarter
Hält's aus hier
Beiträge: 9



BeitragVerfasst: Do 01.01.09 17:41 
Ah vielen Dank!
Das war wohl der entscheidene Hinweis. :)
Kha
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 3803
Erhaltene Danke: 176

Arch Linux
Python, C, C++ (vim)
BeitragVerfasst: Do 01.01.09 23:05 
user profile iconjaenicke hat folgendes geschrieben Zum zitierten Posting springen:
Da du hier keine Kantengewichte hast, könntest du einfach eine Breitensuche durchführen.
Das dürfte von der Laufzeit her aber nur bei allerkleinsten Karten akzeptabel sein.

Solche Karten mit Hindernissen, wie sie auch oft in PC-Spielen vorkommen, sind das Paradebeispiel für A*, einen heuristischen Verwandten des Dijkstra.

_________________
>λ=
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19314
Erhaltene Danke: 1747

W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: Do 01.01.09 23:35 
Dazu gibt es auch eine gute Beschreibung und ein Beispiel in Delphi in der DP von Daniel. Moment... genau, hier:
www.delphipraxis.net/post565850.html
Den Beitrag fand ich recht gut verständlich. (Besser als das was ich im Studium dazu gelesen hatte. :D)

Ich war aber davon ausgegangen, dass es eher eine Übungsaufgabe war, bei der die Optimierung nicht ganz so wichtig ist, und einfacher ist die Breitensuche. ;-)
dennismijo Threadstarter
Hält's aus hier
Beiträge: 9



BeitragVerfasst: So 04.01.09 02:38 
Vielen Dank, für eure Antworten.
Die A* vorgehensweise finde ich sehr interessant.

Ein Abschließendes Urteil? Was lohnt sich für mich mehr?

Es handelt sich insgesamt um eine 9x9 Matrix.

Wichtig ist nur (natürlich) dass es das richtige Ergebnis zurückgibt, kann man diesbezüglich der Breitensuche immer "vertrauen"?

Ich gehe davon aus, dass die A*-Methode schwerer zu implementieren ist, ja?

Lg

Dennis
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19314
Erhaltene Danke: 1747

W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: So 04.01.09 03:01 
user profile icondennismijo hat folgendes geschrieben Zum zitierten Posting springen:
Es handelt sich insgesamt um eine 9x9 Matrix.
Da sollte die Breitensuche auf jeden Fall schnell genug sein.

user profile icondennismijo hat folgendes geschrieben Zum zitierten Posting springen:
Wichtig ist nur (natürlich) dass es das richtige Ergebnis zurückgibt, kann man diesbezüglich der Breitensuche immer "vertrauen"?
Ja, die Breitensuche sucht ja immer gleichzeitig alle gleich weit entfernten Felder ab und dann die davon benachbarten usw.
Wenn man also am Zielfeld ankommt, dann hat man immer den kürzesten Weg (bzw. einen der kürzesten, wenn es gleich lange gibt).

user profile icondennismijo hat folgendes geschrieben Zum zitierten Posting springen:
Ich gehe davon aus, dass die A*-Methode schwerer zu implementieren ist, ja?
Schwerer nicht unbedingt, wenn man es erst verstanden hat, aufwendiger ist sie aber bei der Implementierung. ;-)
dennismijo Threadstarter
Hält's aus hier
Beiträge: 9



BeitragVerfasst: So 11.01.09 21:10 
Vielen Dank!
Ich habe mal "spaßighalber" beides implementiert. Beides Funktioniert super! ;)