#include < stdio.h > #include < stdlib.h > #include < string.h > #define SUCCESS 1 #define FAIL 0 #define FREE 1 #define NOT_FREE 0 #define N 8 int pos[N]; int col[N]; int down[2 * N - 1]; int up[2 * N - 1]; void init_board() { int i; for (i = 0; i < N; i++) pos[i] = -1; for (i = 0; i < N; i++) col[i] = FREE; for(i = 0; i < 2 * N - 1; i++) down[i] = FREE; for (i = 0; i< 2 * N -1; i++) up[i] = FREE; } void print_queens() { int i, j; for(i = 0; i < N; i++){ for(j = 0; j < N; j++){ if(pos[i] == j) printf("Q "); else printf(". "); } printf("\n"); } printf("\n"); } int try(int a) { int b; for (b = 0; b < N; b++){ pos[a] = b; col[b] = NOT_FREE; up[a + b] = NOT_FREE; down[a - b + (N-1)] = NOT_FREE; if(a + 1 >= N) return SUCCESS; else { if(try(a + 1) == SUCCESS) return SUCCESS; else { pos[a] = -1; col[b] = FREE; up[a + b] = FREE; down[a-b + (N-1)] = FREE; } } } return FAIL; } main() { init_board(); if(try(0) == SUCCESS) print_queens(); else printf("Sorry, but there is no solution.\n"); }