#include "n_queens.h" void print_number(int n) { char c; if (n >= 10) print_number(n / 10); c = '0' + (n % 10); write(1, &c, 1); } void print_solution(int *queens, int n) { int i; i = 0; while (i < n) { if (i > 0) write(1, " ", 1); print_number(queens[i]); i++; } write(1, "\n", 1); } int is_safe(int *queens, int row, int col, int n) { int i; (void)n; i = 0; while (i < row) { if (queens[i] == col) return (0); if (queens[i] - i == col - row) return (0); if (queens[i] + i == col + row) return (0); i++; } return (1); } void solve_nqueens(int *queens, int row, int n) { int col; if (row == n) { print_solution(queens, n); return ; } col = 0; while (col < n) { if (is_safe(queens, row, col, n)) { queens[row] = col; solve_nqueens(queens, row + 1, n); } col++; } } int main(int argc, char **argv) { int n; int *queens; if (argc != 2) return (1); n = atoi(argv[1]); if (n <= 0) return (1); queens = (int *)malloc(sizeof(int) * n); if (!queens) return (1); solve_nqueens(queens, 0, n); free(queens); return (0); }