/* Generates all possible placements of n non-attacking queens on an nxn board. */ #include #include #define MAX 12 int n; int A[MAX]; int sol[MAX]; int B[2*MAX-1]; int C[2*MAX-1]; void PrintIt(void) { int i; for (i=0; i < n ; i ++) printf(" %2d", sol[i] + 1); printf("\n"); } void Q(int col) { int row; for (row=0; row < n; row ++) { if (A[row] && B[row + col] && C[row - col + (n-1)]) { sol[col] = row; A[row] = 0; B[row + col] = 0; C[row - col +(n-1)] = 0; if (col < n-1) Q(col+1); else PrintIt(); A[row] = 1; B[row + col] = 1; C[row - col + (n-1)] = 1; } } } int main(int argc, char *argv[]) { int i; if (argc != 2) { printf("\n A single argument expected.\n"); return 1; } n = atoi(argv[1]); if (n < 0) { printf("\n Positive number expected.\n"); return 2; } if (n > MAX) { printf("\n Number not greater than %d expected.\n", MAX); return 3; } for (i=0; i < n; i ++) A[i] = 1; for (i=0; i < 2*n-1; i ++) {B[i] = 1; C[i] = 1;} Q(0); return 0; }