Frage zu meinem N-Damen-Algorithmus
-
Hey, ich arbeite schon einige Tage an meinem n-damen Programm, aber ich komm einfach nicht weiter was den Algorithmus angeht.
Die erste 1 wird mir ausgegeben, aber er scheint mir danach nicht auf die Funktion konflikt zuzugreifen.
Kurz zur Erklärung:
"schach" ist mein Schachbrett Array gefüllt mit nullen. Die 1 soll die Damen darstellen.
"i" ist die Schachbrettgröße, manuell vom Benutzer einstellbar (von 4-12).Meine Mainfunktion hab ich jetzt mal nicht dazu gepackt, da die doch relativ gut gefüllt ist und ich es gern etwas übersichtlicher halten würde. Falls ihr sie allerdings braucht um meinen Fehler zu identifizieren, pack ich sie gerne mit rein.
Wäre über jede Erklärung/Hilfe dankbar, was an meinem Code nicht stimmt.
int damehinzu(int schach[][SIZE], int i, int positionx, int positiony) { int a = 0; while (a <= i) { schach[positionx][positiony] = 1; if (!konflikt(schach, i)) { if (positionx < i || positiony < i) { damehinzu(schach, i, positionx + 1, positiony + 1); } else { damehinzu(schach, i, positionx - 1, positiony - 1); } } else { schach[positionx][positiony] = 1; } a++; } return 0; } int konflikt(int schach[][SIZE], int i) { int x, y, a; for (x = 0; x <= i; x++) { for (y = 0; y <= i; y++) { //Überprüft alle Zeilen für jede Spalte if (schach[x][y] == 1) return 1; for (a = 1; a <= i; a++) { //Diagonale Überprüfung if (schach[x + a][y + a] == 1 || schach[x + a][y - a] == 1 || schach[x - a][y - a] == 1 || schach[x - a][y + a] == 1) return 2; } } } return 0; //Kein Konflikt } //Dieser Teil ist aus der main funktion damehinzu(schach, i, 0, 0 + 1);
-
Deine Konflikt-Funktion ist (logisch) falsch, denn bisher überprüfst du jedes Feld - und das ergibt immer 1.
Du mußt die Sichtbarkeit (bzw. Schlagbarkeit) der Damen gegenseitig überprüfen, d.h. ob diese horizontal, vertikal oder diagonal sich sehen (bzw. schlagen) können.Wenn man von vornherein schon davon ausgeht, daß keine zwei Damen in einer Reihe (bzw. Spalte) sein können, dann vereinfacht sich auch die Lösung, s. Damenproblem (4 Algorithmen zur Lösungssuche).
-
Th69 schrieb:
Deine Konflikt-Funktion ist (logisch) falsch, denn bisher überprüfst du jedes Feld - und das ergibt immer 1.
Du mußt die Sichtbarkeit (bzw. Schlagbarkeit) der Damen gegenseitig überprüfen, d.h. ob diese horizontal, vertikal oder diagonal sich sehen (bzw. schlagen) können.Wenn man von vornherein schon davon ausgeht, daß keine zwei Damen in einer Reihe (bzw. Spalte) sein können, dann vereinfacht sich auch die Lösung, s. Damenproblem (4 Algorithmen zur Lösungssuche).
Danke, war ein Denkfehler von mir.
Ich versuchs mal weiter, falls ich weitere Fragen habe, melde ich mich hier später nochmal.