Esempio n. 1
0
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);
}
Esempio n. 2
0
File: checks.c Progetto: chinspp/42
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));
}
Esempio n. 3
0
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);
}