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
 
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
 


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 12:00 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz