int grid_is_valid(char grid[9][9], int pos) { int column; int row; char nb; if (pos == 9 * 9) return (1); column = pos / 9; row = pos % 9; if (grid[column][row] != '.') return (grid_is_valid(grid, pos + 1)); nb = '1'; while (nb <= '9') { if (is_on_row(nb, grid, row) == 0 && is_on_column(nb, grid, column) == 0 && is_on_block(nb, grid, column, row) == 0) { grid[column][row] = nb; if (grid_is_valid(grid, pos + 1)) return (1); } nb++; } grid[column][row] = '.'; return (0); }
int grid_is_valid(int grid[9][9], int case_nb) { int line; int column; line = case_nb / 9; column = case_nb % 9; if (case_nb == 81) { return (1); } if (grid[line][column] != 0) { return (grid_is_valid(grid, case_nb + 1)); } return (backtrack(grid, case_nb, line, column)); }
int backtrack(int grid[9][9], int case_nb, int line, int column) { int value; value = 1; while (value <= 9) { if (not_in_line(grid, value, line) && not_in_column(grid, value, column) && not_in_square(grid, value, line, column)) { grid[line][column] = value; if (grid_is_valid(grid, case_nb + 1)) { return (1); } } value++; } grid[line][column] = 0; return (0); }