Course:Advanced Topics in Algorithms and Datastructures:SS2006

8.3 Backtracking

Anhand des hier vorgestellten 4-Damen-Problems (eine Vereinfachung des bekannten 8-Damen-Problems) wird das Prinzip des Backtrackings vorgestellt. Die folgenden Bilder verdeutlichen noch einmal den Ablauf des Verfahrens. Die Damen-Steine werden inkrementell in die Reihen gesetzt, in denen Sie keine anderen Steine schlagen. Wenn keine weiteren Möglichkeiten vorhanden sind, wird ein Backtrack-Schritt eingelegt und bei einem vorhergehenden Stein eine andere Position gewählt.


Ausschnitt im Lecturnity Flash-Player anspringen   Ausschnitt im Lecturnity Player anspringen   Vorlesung im eLectures-Portal

Ausschnitt im Lecturnity Flash-Player anspringen   Ausschnitt im Lecturnity Player anspringen   Vorlesung im eLectures-Portal

Ausschnitt im Lecturnity Flash-Player anspringen   Ausschnitt im Lecturnity Player anspringen   Vorlesung im eLectures-Portal

Ausschnitt im Lecturnity Flash-Player anspringen   Ausschnitt im Lecturnity Player anspringen   Vorlesung im eLectures-Portal

Ausschnitt im Lecturnity Flash-Player anspringen   Ausschnitt im Lecturnity Player anspringen   Vorlesung im eLectures-Portal

Ausschnitt im Lecturnity Flash-Player anspringen   Ausschnitt im Lecturnity Player anspringen   Vorlesung im eLectures-Portal

Ausschnitt im Lecturnity Flash-Player anspringen   Ausschnitt im Lecturnity Player anspringen   Vorlesung im eLectures-Portal

Ausschnitt im Lecturnity Flash-Player anspringen   Ausschnitt im Lecturnity Player anspringen   Vorlesung im eLectures-Portal

Ausschnitt im Lecturnity Flash-Player anspringen   Ausschnitt im Lecturnity Player anspringen   Vorlesung im eLectures-Portal


An dieser Stelle erfolgt dann ein Backtrack-Schritt:


Ausschnitt im Lecturnity Flash-Player anspringen   Ausschnitt im Lecturnity Player anspringen   Vorlesung im eLectures-Portal

Ausschnitt im Lecturnity Flash-Player anspringen   Ausschnitt im Lecturnity Player anspringen   Vorlesung im eLectures-Portal

Ausschnitt im Lecturnity Flash-Player anspringen   Ausschnitt im Lecturnity Player anspringen   Vorlesung im eLectures-Portal

Ausschnitt im Lecturnity Flash-Player anspringen   Ausschnitt im Lecturnity Player anspringen   Vorlesung im eLectures-Portal

Ausschnitt im Lecturnity Flash-Player anspringen   Ausschnitt im Lecturnity Player anspringen   Vorlesung im eLectures-Portal

Ausschnitt im Lecturnity Flash-Player anspringen   Ausschnitt im Lecturnity Player anspringen   Vorlesung im eLectures-Portal

Ausschnitt im Lecturnity Flash-Player anspringen   Ausschnitt im Lecturnity Player anspringen   Vorlesung im eLectures-Portal

Ausschnitt im Lecturnity Flash-Player anspringen   Ausschnitt im Lecturnity Player anspringen   Vorlesung im eLectures-Portal

Ausschnitt im Lecturnity Flash-Player anspringen   Ausschnitt im Lecturnity Player anspringen   Vorlesung im eLectures-Portal

Ausschnitt im Lecturnity Flash-Player anspringen   Ausschnitt im Lecturnity Player anspringen   Vorlesung im eLectures-Portal

Ausschnitt im Lecturnity Flash-Player anspringen   Ausschnitt im Lecturnity Player anspringen   Vorlesung im eLectures-Portal


An dieser Stelle erfolgt dann ein Backtrack-Schritt:


Ausschnitt im Lecturnity Flash-Player anspringen   Ausschnitt im Lecturnity Player anspringen   Vorlesung im eLectures-Portal


An dieser Stelle erfolgt dann wiederum ein Backtrack-Schritt:


Ausschnitt im Lecturnity Flash-Player anspringen   Ausschnitt im Lecturnity Player anspringen   Vorlesung im eLectures-Portal

Ausschnitt im Lecturnity Flash-Player anspringen   Ausschnitt im Lecturnity Player anspringen   Vorlesung im eLectures-Portal

Ausschnitt im Lecturnity Flash-Player anspringen   Ausschnitt im Lecturnity Player anspringen   Vorlesung im eLectures-Portal

Ausschnitt im Lecturnity Flash-Player anspringen   Ausschnitt im Lecturnity Player anspringen   Vorlesung im eLectures-Portal

Ausschnitt im Lecturnity Flash-Player anspringen   Ausschnitt im Lecturnity Player anspringen   Vorlesung im eLectures-Portal


Jetzt wird in der Veranstaltung ein Fehler gemacht, es hätte direkt der Stein in die erste Zeile gesetzt werden sollen, anstatt in die zweite Zeile:


Ausschnitt im Lecturnity Flash-Player anspringen   Ausschnitt im Lecturnity Player anspringen   Vorlesung im eLectures-Portal

Ausschnitt im Lecturnity Flash-Player anspringen   Ausschnitt im Lecturnity Player anspringen   Vorlesung im eLectures-Portal


So wäre es direkt richtig gewesen:


Ausschnitt im Lecturnity Flash-Player anspringen   Ausschnitt im Lecturnity Player anspringen   Vorlesung im eLectures-Portal


Und mit dem letzten Schritt, kommen wir dann zur Lösung:


Ausschnitt im Lecturnity Flash-Player anspringen   Ausschnitt im Lecturnity Player anspringen   Vorlesung im eLectures-Portal

Ausschnitt im Lecturnity Flash-Player anspringen   Ausschnitt im Lecturnity Player anspringen   Vorlesung im eLectures-Portal


Lösung


Ausschnitt im Lecturnity Flash-Player anspringen   Ausschnitt im Lecturnity Player anspringen   Vorlesung im eLectures-Portal

Abschliessend wir dann noch die Lösung als Vektor skizziert:


Algorithmus


Ausschnitt im Lecturnity Flash-Player anspringen   Ausschnitt im Lecturnity Player anspringen   Vorlesung im eLectures-Portal
  1. Methode FindeStellung (int i; boolean gefunden);
  2. (*findet Lösung ab Spalte i, wenn es eine gibt, und liefert den Wert gefunden = true, sonst gefunden = false *)
  3. gefunden = false; j = 0;
  4. repeat (* wähle nächste Zeile j *)
  5. if (*Dame in Zeile j und Spalte i bedroht keine bisher platzierte *)
  6. then (* setze Dame auf Position (j, i) *);
  7. if (* keine nächste Spalte mehr *)
  8. then (* fertig; Abbruch *)
  9. else (* betrachte nächste Spalte *)
  10. FindeStellung (i+1, gefunden);
  11. if not gefunden then (* Backtrack: mache Wahl rückgängig *)
  12. until gefunden or (* alle Zeilen probiert *)