@HoShik

Почему возникает ошибка при опустошении матрицы судоку?

Взял алгоритм решения судоку 9х9 с сайта Rosetta Code:
int trycell(int *x, int pos)
{
	int row = pos / 9;
	int col = pos % 9;
	int i, j, used = 0;
 
	if (pos == 81) return 1;
	if (x[pos]) return trycell(x, pos + 1);
 
	for (i = 0; i < 9; i++)
		used |= 1 << (x[i * 9 + col] - 1);
 
	for (j = 0; j < 9; j++)
		used |= 1 << (x[row * 9 + j] - 1);
 
	row = row / 3 * 3;
	col = col / 3 * 3;
	for (i = row; i < row + 3; i++)
		for (j = col; j < col + 3; j++)
			used |= 1 << (x[i * 9 + j] - 1);
 
	for (x[pos] = 1; x[pos] <= 9; x[pos]++, used >>= 1)
		if (!(used & 1) && trycell(x, pos + 1)) return 1;
 
	x[pos] = 0;
	return 0;
}

Для окончательной генерации судоку, написал функцию:
int temp_arr[81];
void brute(int n,int array[n][n]) 
{
}

Суть такова: функция принимает сгенерированную решенную базу, случайный элемент делает нулевым, записывая "обнуленный" элемент в temp. Дальше матрица преобразовывается в одномерный массив (необходим для взятого мною алгоритма решения). Если данный массив имеет не имеет решения, "обнуленная" переменная возвращается на свое место.
Но по окончанию работы, вместо желаемого результата, получаю полностью нулевой массив :(
В чем заключается ошибка?
UPD: сайт откуда позаимствовал алгоритм: rosettacode.org/wiki/Sudoku#C
  • Вопрос задан
  • 75 просмотров
Решения вопроса 1
@HoShik Автор вопроса
В общем, нашел решение. Вместо приравнивания к нулю, нужно приравнивать к единице (или чему то, отличному от нуля).
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы