AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Programmieren allgemein Backtracking: Springer-Problem beim Schach (Optimierung)
Thema durchsuchen
Ansicht
Themen-Optionen

Backtracking: Springer-Problem beim Schach (Optimierung)

Ein Thema von Antiexperte · begonnen am 3. Nov 2005 · letzter Beitrag vom 4. Nov 2005
Antwort Antwort
Antiexperte

Registriert seit: 3. Nov 2005
3 Beiträge
 
#1

Backtracking: Springer-Problem beim Schach (Optimierung)

  Alt 3. Nov 2005, 12:34
Hallo allerseits!

Ich hab da so ein kleines Problem, bei dem ich auf eure Hilfe hoffe:
Wir haben im Informatik-Unterricht momentan Backtracking als Thema.
Dabei sollten wir mit Hilfe von Delphi das "Springer-Problem" vom Schach ausprogrammieren.

Das Grundgerüst habe ich auch schon stehen, aber leider happert es bei uns an der Optimierung.
Mit 7 * 7-Feldern läuft er noch durch, aber bei 8 * 8 dauert es schon >20min auf nem 1GHz Celeron (abgebrochen).

Ich hab das komplette Programm mal als *.zip-Datei angehängt.
Wir arbeiten in der Schule mit Delphi 6.

Kann mir jemand ein paar Tipps + Anleitungen geben, wie ich das Programm noch weiter optimieren kann?
Die Struktur der Procedures soll weitesgehend so bleiben, da wir die vorgegeben gekriegt haben.

Das größte Problem an der Sache ist aber, dass die Deadline schon morgen um 10:30Uhr ist.

Ich (und meine Projektmitarbeiten, die aber überhaupt gar keine Ahnung haben ) wäre(n) da sehr dankbar!
Stehe für weitere Fragen natürlich den Tag über bereit!

Grüße & auf ein harmonisches Zusammenleben im Forum!

Angehängte Dateien
Dateityp: zip springer_553.zip (6,9 KB, 55x aufgerufen)
  Mit Zitat antworten Zitat
Benutzerbild von Net7
Net7

Registriert seit: 22. Jun 2004
Ort: Lauenburg
161 Beiträge
 
Delphi 7 Professional
 
#2

Re: Backtracking: Springer-Problem beim Schach (Optimierung)

  Alt 3. Nov 2005, 16:21
Dieser Algo wird Stunden brauchen, was aber nicht direkt am Algo liegt. Sondern an der Vorgehensweise.

Schau mal hier..

Springerproblem

Weiter unten auf dieser Seite ist noch ein Algo mit Heuristik. Der rechnet das in ein Paar Sekunden.

Gruß Net7
Marko
So`ne Atombombe kann einem den ganzen Tag verderben!
Eine eigene DLL in C++ geschrieben wird meist ein Sklave für mein Delphi/Pascal.
  Mit Zitat antworten Zitat
Eichhoernchen

Registriert seit: 22. Apr 2004
Ort: Hagen
322 Beiträge
 
Turbo Delphi für Win32
 
#3

Re: Backtracking: Springer-Problem beim Schach (Optimierung)

  Alt 3. Nov 2005, 17:48
haben wir gerade in der schule gemacht.. hier haste was.. guckst du Annhang... musste so modifizieren wie du gern hättest!


Ach ja... bau nen abbruchbutton ein kann ganz schön nervig sein


Mist: hätte lesen sollen.. naja schneller wird das auch nicht sein... aber ist vielleicht nen bisschen besser struckturiert als deins. Aber zur optimierung würd ich mir die Seite meines vorredners angucken!
Angehängte Dateien
Dateityp: rar springer_138.rar (191,4 KB, 57x aufgerufen)
Jan
  Mit Zitat antworten Zitat
Antiexperte

Registriert seit: 3. Nov 2005
3 Beiträge
 
#4

Re: Backtracking: Springer-Problem beim Schach (Optimierung)

  Alt 3. Nov 2005, 20:22
Danke euch beiden erstmal!

Hab mir die Seite mal ausgedruckt und werde mich dann mal dadurch kämpfen.

Hat denn jmd. nich so "ad hoc" nen paar Zeilen Quelltext oder kann mir sagen, WAS ich verändern muss?
  Mit Zitat antworten Zitat
Benutzerbild von faux
faux

Registriert seit: 18. Apr 2004
Ort: Linz
2.044 Beiträge
 
Turbo Delphi für Win32
 
#5

Re: Backtracking: Springer-Problem beim Schach (Optimierung)

  Alt 3. Nov 2005, 20:49
OT:
Man bedenke, dass das ein 12 Jähriger im Kopf bei "Wetten, dass?" gelöst hat. Er hat das Spielfeld nicht gesehen.
Faux Manuel
Wer weiß, dass er nichts weiß, weiß mehr, als der der nicht weiß, dass er nichts weiß.
GoTrillian
  Mit Zitat antworten Zitat
Antiexperte

Registriert seit: 3. Nov 2005
3 Beiträge
 
#6

Re: Backtracking: Springer-Problem beim Schach (Optimierung)

  Alt 3. Nov 2005, 21:08
Ich war das nich
  Mit Zitat antworten Zitat
schöni

Registriert seit: 23. Jan 2005
Ort: Dresden
445 Beiträge
 
Delphi 7 Personal
 
#7

Re: Backtracking: Springer-Problem beim Schach (Optimierung)

  Alt 4. Nov 2005, 11:54
Hallo!

Habe grad mal die Netzseite aufgerufen, auf der das Springerproblem erklärt ist. Dazu hab ich paar Fragen:

Zitat:
Zur Wiederholung: Die Breitensuche funktioniert mit zwei Beuteln:
1. Beutel 1 ist leer. (In Beutel 1 werden all die Felder geworfen, die mit dem Feld, auf dem der Springer gerade steht (aktuelles Feld), verbunden sind).
2. Beutel 2 ist leer.
3. Die von dem aktuellen Feld aus erreichbaren und freien Felder werden in Beutel 1 geworfen, das aktuelle Feld selbst kommt in Beutel 2.
Warum muss hier noch was in Beutel 1. Der ist doch durch Scritt 1 schon gefüllt? Ich kann doch nur die erreichbaren Felder in Beutel 1 füllen und Alternativen geeignet markieren.

Zitat:
4. Solange Beutel 1 nicht leer ist, wiederhole folgende drei Schritte:
4.1 Nimm ein Feld aus Beutel 1.
4.2 Werfe die Nachfolger dieses Feldes, sofern sie a) frei und b) noch nicht in Beutel 1 oder Beutel 2 sind, in Beutel 1.
Diesen Ablauf hier kann ich mir bildlich überhaupt nicht vorstellen! Der Springer zieht entweder:

-2 Felder hoch, 1 Feld rechts/links
-2 Felder links, 1 Feld hoch/runter
-2 Felder rechts,1 Feld hoch/runter
-2 Felder runter,1 Feld rechts/links

Ich verstehe Schritt 1 so, das ich alle vom Springer erreichbaren Felder in Beutel 1 lege. Und zwar als geeignete Datenstruktur, die aufzeigt, welches Feld Nachfolger ist. Baumstruktur, denk ich mal, und zwar so:



-- --
| | |
--.--
| | |
-- --


Der Punkt in der Mitte soll die Position des Springers sein. Die Striche symbolisieren die möglichen Wege. Immer, egal welche Richtung -> 2 vor(rück,links,rechts) und dann ein Feld
90 Grad versetzt in 2 Richtungen.

Wieso muß ich dann biem Ziehen noch mal Felder in Beutel 1 legen?
Wenn ich die richtige Datenstruktur habe, habe ich doch auch die blegbaren Felder!

Zitat:
4.3 Werfe danach das Feld in Beutel 2.
Verstehe ich so, das ein ausgeführter Zug in Beutel 2 liegt. Ist das richtig?

Zitat:
5. Zähle nun die Felder in Beutel 2 und vergleiche sie mit der Anzahl der noch freie Felder. Sind die beiden Zahlen nicht gleich, so existiert ein Feld oder mehrere Felder, die nicht mehr erreicht werden können.

Was ist das nun schon wieder? Ich dachte (siehe oben), in Beutel 2 seien die Felder, die schon angesprungen wurden? Wo liegt mein Denkfehler?

schöni
Damit der Topf nicht explodiert, lässt man es ab und zu mal zischen.
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 11:40 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz