Au... ich hätt den Code wirklich erstmal angucken sollen. Sieht mir also ja eher danach aus, als ob dein "Wegenetz" nicht wirklich aus Knoten und Kanten besteht, sondern du eher eine Art StringGitter als Karte benutzt mit einzelnen String als Kartenobjekte. Jetzt verstehe ich also richtig, dass du von einem gegeben Startpunkt aus (also ein bestimmtes feld im Gitter) den küresten Weg zu einem anderen Feld suchst (durch X kann man durchgehen, durch alles andere nicht, zum Apfel will man...)?
Prinzipiell ist der Dikstra immer noch möglich, aber vielleicht nicht unbedingt optimal, eine Entfernungsmtarix aufzustellen.
Da wirst du bei der Rekusrion bleiben müssen, dnke ich. Hiermal ein Schnellschuss:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7:
| Bewertungsfunktion(newX, newY, oldX, oldY): Integer; begin end; |
Die Bewertungsfunktion prüft also für jedes feld die Wegstrecken zum Ziel. Der Startaufruf wäre also GesamtLangeZumZiel := Bewertungsfunktion(PosX, PosY, -1, -1), wobei die -1 nur bedeutet, dass beim ersten Mal alle Nachbarn geprüft werden müssen. Das gibt dir also die Länge zum Ziel zurück. Wenn du den Weg auch noch brauchst, müsst du dir bei jeweilgen günstigsten Pfad die entsprechende Position in einer Liste merken, so dass ma Ende eine List mit den entsprechenden Pfadpositionen der Reihenfolge nach entsteht.
Es ist spät, kann sein, dass ich grad nen Denkfehler habe...
Moderiert von raziel: Delphi-Tags hinzugefügt.