Damenproblem
-
Hallo.
Ich habe hier einen Code zum AchtDamenProblem. Ich versuche ihn nun zu verstehen. Jedoch hänge ich an einer Stelle. Hier erstmal der Code:#include <stdio.h> #include <stdlib.h> int x[8]; /* x[i] = x coordinate of queen in row i. */ //Ausgabe Feld void print() { int i,j; printf ("+----------------+\n"); for (i=0; i<8; i++) { printf ("|");//Anfang von Spalte i for (j=0; j<8; j++) if (j==x[i]) printf("<>"); else printf(" "); printf("|\n");//Ende von Spalte i } printf ("+----------------+\n\n"); } /* tests, whether (ix, iy) is beaten by queens 0...(iy-1) */ int is_free (int ix, int iy) { int i; for (i=0; i<iy; i++) if ((x[i]==ix) || (abs(x[i]-ix)==abs(i-iy))) return 0; return 1; } /* tries to place queen n on row n */ void try (int n) { int i; if (n==8) print(); else for (i=0; i<8; i++) if (is_free(i,n)) { x[n]=i; try (n+1); } } int main () { try (0); return 0; }
Und zwar verstehe ich nicht wo das abs() in der Funktion is_free() herkommt.
Kann mir da jemand helfen ?
Mfg Dominic
-
Weil eine Dame diagonal in 4 Richtungen schlagen kann, und du eigentlich nur nachschauen willst, ob das gefragte Feld auf einer Diagonale einer dame liegt. Das heißt aber wiederum, daß die x- und die y-Differerenz der Koordinaten gleich sein muß (und zwar der Betrag davon).