Entwickler-Ecke

Algorithmen, Optimierung und Assembler - Solitaire (Brettspiel) - Umsetzungsproblem


Jerk - Di 16.12.08 15:22
Titel: Solitaire (Brettspiel) - Umsetzungsproblem
Wir sollen für Solitaire ( Brettspiel ) [http://de.wikipedia.org/wiki/Solit%C3%A4r_(Brettspiel)] ein Programm erstellen, welches möglichst effizient, das Spiel "löst" wenn ein Stein mit der Feldnummer n fehlt.

Was ich weis, das Bruteforce/Backtracking wohl sinnlos sein wird. Was ich nicht weis ist, wie ich die Lösung des Spiels sonst umsetzen soll.
Hilfsfunktionen sind nicht das Problem sondern das Spiel selber.

Ich dachte ersteinmal an eine Art Regeln die man aufstellt, von wegen wenn der Stein fehlt dann tausche niemals den anderen o.ä. aber damit komm ich nicht wirklich weiter.

Wie gehe ich am besten an das Problem heran?


nagel - Di 16.12.08 15:25

Der von dir verlinkte WP-Artikel weiß was dazu ;) .


Jerk - Di 16.12.08 15:31

*facepalm*
Ok also sozusagen einen "Baum" erstellen.
d.h.

Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
n= anzahl verbleibender Spielsteine
FUNKTION TEST : BOOLEAN
Für jedes leere Feld:
  Gibt es mögliche Sprünge?
    Springe
    n=n-1
    wenn TEST = FALSE
      mache zug rückgängig
    SONST
      Gebe Ergebnis aus
  SONST
    Wenn n=1 
      return TRUE
    SONST
      return FALSE


Jerk - Fr 19.12.08 09:40

Sorry für den Doppelpost, aber ich sitze noch an dem Problem.

Das Rekursive Backtracking habe ich verstanden, doch bekomme ich es nicht hin die "Züge" rückgängig zu machen. Da das Spielfeld ja ein Array (3-Dim) ist dachte ich wäre ein Stack doch eher ungeeignet oder?


Fiete - Fr 19.12.08 10:27

Moin Jerk,
schau mal hier nach http://www.delphi-forum.de/topic_Einsiedlerspiel_83197.html.

Gruß
Fiete