Hi @ all
Hab folgenden Code von meiner AlgoDat Dozentin bekommen und aus ihrem Skript raus kopiert. Nun funktioniert das Ding aber net -.- ...
Leider bin ich nicht der gewandteste im Programmieren
Anfänger sozusagen ...
Jetzt hoffe ich einer von euch kann da nen Blick drauf werfen und findet evtl. das Problem!
Zur Dozentin kann ich nicht mehr gehen, weil ich die bis übermorgen nicht mehr sehe und da Schreib ich Prüfung
Vielen Dank und viele Grüße
Liptux
Alles anzeigen
Hab folgenden Code von meiner AlgoDat Dozentin bekommen und aus ihrem Skript raus kopiert. Nun funktioniert das Ding aber net -.- ...
Leider bin ich nicht der gewandteste im Programmieren

Anfänger sozusagen ...

Jetzt hoffe ich einer von euch kann da nen Blick drauf werfen und findet evtl. das Problem!
Zur Dozentin kann ich nicht mehr gehen, weil ich die bis übermorgen nicht mehr sehe und da Schreib ich Prüfung

Vielen Dank und viele Grüße
Liptux
Quellcode
- public class AchtDamen {
- private int n; // Dimension des Problems
- // bereits gesetzte Damen
- private int[] dameInReihe; // muss mit -1 initialisiert werden
- // speichert bedrohte Spalten und Diagonalen
- // muss mit false (=frei) initialisiert werden
- private boolean[] spalte;
- private boolean[] diagRechts;
- private boolean[] diagLinks;
- AchtDamen(int n) {
- this.n = n;
- dameInReihe = new int[n];
- spalte = new boolean[n];
- for (int i = 0; i < n; i++) {
- dameInReihe[i] = -1;
- spalte[i] = false;
- }
- diagRechts = new boolean[2 * n - 1];
- diagLinks = new boolean[2 * n - 1];
- for (int i = 0; i < 2 * n - 1; i++) {
- diagRechts[i] = false;
- diagLinks[i] = false;
- }
- }
- boolean versuchen(int x) { // x: aktuelle Dame[0,7]
- if (x == n) {
- // Abbruchbedingung der Rekursion:
- // alle n Damen [0, n-1] sind platziert: fertig!
- return true;
- } else {
- // Laufschleife ueber alle Spalten
- for (int y = 0; y < n; y++) {
- // Berechne Diagonale
- int links = (x + y);
- int rechts = (n - 1 - x + y);
- // wenn PLatz nicht bedroht:
- if (!spalte[y] && !diagRechts[rechts] && !diagLinks[links]) {
- // Dame setzten und bedrohte Spalte
- // und Diagonale markieren:
- dameInReihe[x] = y;
- spalte[y] = true;
- diagLinks[links] = true;
- diagLinks[rechts] = true;
- // nur fuer Anschauungszwecke:
- printSpielfeld(x);
- // nächste Dame:
- boolean erfolg = versuchen(x + 1);
- if (erfolg) {
- // Damen erfolgreich gesetzt, abbrechen:
- return true;
- } else {
- // naechste Position in for-Schleife, deshalb
- // Spalten und Diagonalen zurücksetzen:
- dameInReihe[x] = -1;
- spalte[y] = false;
- diagRechts[rechts] = false;
- diagLinks[links] = false;
- }
- }
- }
- // nicht machbar, Rekursion mit false beenden.
- return false;
- }
- }
- // eine Ausgabefunktion nur für Testzwecke
- void printSpielfeld(int x) {
- for (int i = 0; i < n; i++) {
- for (int j = 0; j < dameInReihe[i]; j++) {
- System.out.print("| ");
- }
- if (dameInReihe[i] != -1) {
- System.out.print("| x ");
- }
- for (int j = dameInReihe[i] + 1; j < n; j++) {
- System.out.print("| ");
- }
- System.out.println("|");
- for (int k = 0; k < n; k++) {
- System.out.print("----");
- }
- System.out.println("-");
- }
- // Zeitverzoegerung fuer langsame Ausgabe:
- try {
- Thread.sleep(1000);
- } catch (InterruptedException e) {
- }
- System.out.println("\n");
- }
- public static void main(String[] args) {
- AchtDamen meinVersuch = new AchtDamen(4);
- meinVersuch.versuchen(0);
- }
- }