Unterschiede
Hier werden die Unterschiede zwischen zwei Versionen der Seite angezeigt.
Beide Seiten, vorherige Überarbeitung Vorherige Überarbeitung Nächste Überarbeitung | Vorherige Überarbeitung | ||
faecher:informatik:oberstufe:algorithmen:rekursion:backtracking:8-damen-problem:start [25.02.2025 10:09] – Frank Schiebel | faecher:informatik:oberstufe:algorithmen:rekursion:backtracking:8-damen-problem:start [25.02.2025 14:44] (aktuell) – [Algorithmus unplugged] Frank Schiebel | ||
---|---|---|---|
Zeile 9: | Zeile 9: | ||
==== Algorithmus unplugged ==== | ==== Algorithmus unplugged ==== | ||
- | Wie würde man das Problem algorithmisch lösen? Am besten | + | Wie würde man das Problem algorithmisch lösen? Am besten |
<WRAP center round info 75%> | <WRAP center round info 75%> | ||
Lies hier erst weiter, nachdem du dir selbst Gedanken gemacht hast, wie du vorgehen könntest. | Lies hier erst weiter, nachdem du dir selbst Gedanken gemacht hast, wie du vorgehen könntest. | ||
Zeile 44: | Zeile 44: | ||
Arbeite mit der folgenden Vorlage: https:// | Arbeite mit der folgenden Vorlage: https:// | ||
- | **(A)** Modelliere das Feld mit einem zweidimensionalen Array des Typs '' | + | **(A)** Modelliere das Feld mit einem zweidimensionalen Array des Typs '' |
**(B)** Implementiere eine Methode '' | **(B)** Implementiere eine Methode '' | ||
Zeile 77: | Zeile 77: | ||
* Überprüfe, | * Überprüfe, | ||
- | ++++ Hilfestellung 1 zu '' | + | ++++ Hilfestellung 1 zu "istPositionErlaubt": | |
+ | <code java> | ||
+ | public boolean istPositionErlaubt(int zeile, int spalte) { | ||
+ | // Füge hier deinen Code für die Kollisionserkennung ein. | ||
+ | // Einen Lösungsvorschlag findest du im Wiki | ||
+ | |||
+ | // Alle Zeilen von 0 bis zeile-1 untersuchen: | ||
+ | for(int zeileAktuell=0; | ||
+ | // Felder oberhalb untersuchen, | ||
+ | // return false | ||
+ | if( FIXME ) { | ||
+ | return false; | ||
+ | } | ||
+ | // Felder der Diagonalen untersuchen, | ||
+ | // return false | ||
+ | // Linke Diagonale | ||
+ | if( FIXME ) { | ||
+ | return false; | ||
+ | } | ||
+ | // Rechte Diagonale | ||
+ | if( FIXME ) { | ||
+ | return false; | ||
+ | } | ||
+ | } | ||
+ | return true; | ||
+ | |||
+ | } | ||
+ | </ | ||
++++ | ++++ | ||
+ | |||
+ | ++++ Lösungsvorschlag zu " | ||
+ | <code java> | ||
+ | public boolean istPositionErlaubt(int zeile, int spalte) { | ||
+ | // Füge hier deinen Code für die Kollisionserkennung ein. | ||
+ | // Einen Lösungsvorschlag findest du im Wiki | ||
+ | |||
+ | // Alle Zeilen von 0 bis zeile-1 untersuchen: | ||
+ | for(int zeileAktuell=0; | ||
+ | // Felder oberhalb untersuchen, | ||
+ | // return false | ||
+ | if(feld[zeileAktuell][spalte]) { | ||
+ | return false; | ||
+ | } | ||
+ | // Felder der Diagonalen untersuchen, | ||
+ | // return false | ||
+ | if(spalte - (zeile-zeileAktuell) >= 0 && feld[zeileAktuell][spalte - (zeile-zeileAktuell)] ) { | ||
+ | return false; | ||
+ | } | ||
+ | if( spalte + (zeile-zeileAktuell) < SIZE && feld[zeileAktuell][spalte + (zeile-zeileAktuell)] ) { | ||
+ | return false; | ||
+ | } | ||
+ | } | ||
+ | return true; | ||
+ | |||
+ | } | ||
+ | </ | ||
+ | |||
+ | ++++ | ||
+ | |||
+ | **(E)** Wenn du geprüft hast, dass deine '' | ||
+ | |||
+ | Teste die Methode mit Schachbrettern 4x4 und 8x8. Überprüfe die ausgegebenen Lösungen stichprobenartig. | ||
+ | |||
{{: | {{: | ||
=== (A2) === | === (A2) === | ||
- | Was ist der Basisfall dieser Rekursion? | ||
+ | Was ist der Basisfall dieser Rekursion? Finde einen Weg, dir mit dem Debugger den Stack anzeigen zu lassen, wenn der Basisfall eintritt. Was fällt dir dabei auf? | ||
{{: | {{: | ||
- | === (A3) - Für die Schnellen | + | === (A3) === |
- | Erweitere das Programm: Lass dir ausgeben, wie viele Lösungen gefunden wurden. | + | Erweitere das Programm: Lass dir ausgeben, wie viele Lösungen gefunden wurden. |
- | {{: | ||
- | === (A4) - Für die Schnellen === | ||
- | Wenn du früh fertig bist, dann kannst du überlegen, ob du selbst eine andere/ | ||
<WRAP center round info 75%> | <WRAP center round info 75%> | ||
Zeile 98: | Zeile 156: | ||
https:// | https:// | ||
</ | </ | ||
+ | |||
+ | |||
+ | ==== Material ==== | ||
+ | |||
+ | {{simplefilelist>: | ||
+ | |||