N-damenproblem funktion isattacking
-
Hallo,
ich schreibe momentan für mein Studium der Wirtschaftsinformatik im ersten Semester am N-Damenproblem. Bisher läuft auch alles, nur habe ich bei der isattacking Funktion das Problem, das zu viele Lösungen gefunden werden. Bei einem 4x4 Feld findet er 256 Lösungen, was ja eher 4^4 entspricht. Ich führe den Code der Überprüfung mal auf, ich finde einfach den Fehler nicht, vll kann mir ja einer helfen? gelöst habe ich das Ganze mit einem zweidimensionalen Array.
int isattacking(struct nqueen *pnqueen, int irow) { int i; int ireturn; ireturn = 0; i = 1; while((i < irow) && (ireturn == 0)) { if((i + pnqueen->aiboard[i][i] == irow + pnqueen->aiboard[irow]) || (i - pnqueen->aiboard[i][i] == irow - *pnqueen->aiboard[irow]) || (pnqueen->aiboard[i][i] == pnqueen->aiboard[irow])) { ireturn = 1; //hit found } i++; } return (ireturn);
Ich hoffe es kann mir jemand helfen, iwie wills einfach nicht nur 92 Lösungen finden ^^
Wenn ich den Einzelschritt durchgehe sehe ich das er jedes Feld mit jedem anderen als Lösung sieht, aber ich weiß nicht warumVielen vielen Dank im Voraus,
Frohe Festtage und ganz liebe Grüße
:xmas1:
-
Du dereferenzierst bei pnqueen->aiboard[i][i] und pnqueen->aiboard[irow] aber gewagt. Meistens ist das ein Fehler, wenn man das unterschiedlich oft macht. Und die Datenstruktur erscheinbt mir nicht supi angemessen zu sein. Warum schaust Du nur auf [i][i], es gibt doch mehr als die längste Diagonale.
Ich würde eher an sowas denken:
struct dame{ // int x;braucht ja gar nicht int y; }; int isattacking(struct damen[8],int x,int y) {//x von 0 bis 7 //y von 0 bis 7 //außerdem gilt, daß die Damen von 0 bis x-1 gesetzt sind int i; for(i=0;i<x;i-=-i) { //if(damen[x].x==x) return false;//gleiche spalte/linue //kann ja gar nicht if(damen[x].y==y) return false;//gleiche zeile/reihe if(damen[x].y-x==y-x) return false;//sehen sich diagonal linksunten nach rechtsoben //der vierte fall ist mir zu schwierig } return 0;//wenn in der Schleife keine begegnng war }
-
Sorry vokard,
aber deines check ich noch weniger als meins^^
was ist denn
i-=-i
das kenn ich zB gar nicht ^^
in den sieben Wochen C die wir an der Hochschule hatten kam das iwie nicht vor. aber danke für deine Mühe auf jeden Fall!Falls noch jemand einen Ansatz hat, nur her damit ich bin um jede Hilfe dankbar!
-
dschinghis schrieb:
was ist denn
i-=-i
Das sollte nur i um eins erhöhen, aber wegen fricky traue ich mich nicht mehr ++i zu schreiben. Außerdem war es falsch, i-=-1 sollte da stehen.