Судоку - найти текущее поле (квадрат или прямоугольник) на основе строки, столбца, размера (?) И размера блока - PullRequest
1 голос
/ 25 марта 2011

Отказ от ответственности: нашел тему с квадратами, и алгоритмы там работают только для этой конкретной проблемы.

Я делаю рекурсивный анализатор судоку с обратным отслеживанием, но у меня возникают проблемы с определением, какое поле связано с данной ячейкой.

Допустим, у нас есть доска 4х4 с коробками размером 2х2 клетки. Тогда подходящим алгоритмом будет (из смежной темы):

int numMajorRows = 2;
int numMajorCols = 2;  
int width = 2;

// assuming row and col also start at 1.  
int squareNumber(int row, int col) {
  int majorRow = (row-1) / width;  // zero based majorRow
  int majorCol = (col-1) / width;  // zero based majorCol
  return majorCol + majorRow * numMajorCols + 1;
}

Однако, как бы выглядел алгоритм, если, скажем, у нас есть доска 6х6 с блоками размером 2х3 ячейки? Я просто не могу понять это ..

Заранее спасибо: -)

Редактировать: [Частично решено] Я грубо заставил это немного, с тем, чтобы высота коробки всегда была больше ширины. Тем не менее, я заинтересован в изящный алгоритм для этого:)

1 Ответ

0 голосов
/ 25 марта 2011

Данный алгоритм работает только для квадратных полей.Теперь у вас есть прямоугольник, и вам понадобится дополнительный атрибут высоты (в приведенном примере алгоритм повторно использует параметр ширины, где требуется высота ячейки - ОК с квадратами, а не ОК с прямоугольниками в целом)

...