Guten morgen,
Du machst da was völlig falsch, uups schlecht geschlafen ....
Was deinen Pogram fehlt ist die Speicherung von Zaehler1 zu jedem Feldpunkt.
Du benutzt Zaehler1 global, bei jeden Schritt zurück wird nicht ein neuer Weg versucht sondern wieder bei 1 begonnen..
Feld: array of array of boolean sollte statt boolean einfach die Zaehler1 beherbergen.
Wenn das Feld 0 ist war dort noch kein Springer, sonst steht dank Zaehler1 in welche der 8 Richtungen er gesprungen ist.
Dein Array of char ist eigentlich doppelt gemoppelt, da diese Information schon in Feld ist.
Um einigermassen vernünftig damit klar zu kommen, mußt Du Dir auch den Weg selber merken.
Du brauchst also eine Liste (array) der Grösse der Anzahl der Spielfelder=sqr(Anzahl2) in der die Koordinaten des x-ten Zuges gespeichert sind.
Der erste Zug kann ja immer 1/1 sein, der Starpunkt sein.
Jetzt zum vorgehen.
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33:
| IniTialisieren: Alles auf 0 setzten. Startbedingungen vorgeben Du bist beim Zug (Zaehler2) nr 1: In der Liste der Züge das die Koordinaten dort 1,1 eintragen. Jetzt in Feld[Liste(Zaehler2).X,Liste(Zaehler2).Y] Zaehler1 = 1 für dieses Feld eintragen.
Jetzt Baktracking: Schaue in der Liste bei Zaehler2 (=ZugNr) nach den aktuellen Koordinaten K_akt und dort nach Zaehler1(=neueRichtung). wiederhole: Falls Zugnr = 0 then Alle Züge durchprobiert-> habe Fertig Falls ZugNr = MaxZuege dann neue Lösung gefunden-> Ausgeben und zaehlen ZugNr verkleinern und weiter machen(eigentlich kann wohl ??Züge direkt zurückgehen)
//Weiter machen Teste ob von K_akt=Liste[ZugNr] aus in neueRichtung ein Sprung möglich ist(Feld innerhalb Spielfeld und unbelegt(=0)). Falls ja dann erhöhe ZugNr und trage die Koordinaten in die Liste ein, belege diese Koordinaten mit neueRichtung=1. //Dieses Backtracking geht eine zug weiter Backtracking, sonst erhöhe Feld[K_akt] um 1 (neueRichtung) //alle Möglichkeiten durchprobiert Falls Feld[K_akt] > 8 dann //erst Feld freigeben Feld[K_akt] = 0 //einen Zug zurückgehen ZugNr = ZugNr-1 sonst //Dieses Backtracking geht in eine neue Richtung(das paasirt aber nur, wenn man einen Zug zurücknimmt Backtracking, |
Ich hoffe das ist unverständlih genug
Gruß Horst