понимание частей этого решения судоку - PullRequest
0 голосов
/ 20 февраля 2020

У меня есть вопрос по поводу следующего фрагмента кода. Это из решения судоку, который я нашел на YouTube. Для решения используется рекурсивный алгоритм возврата. Я просто пытаюсь извлечь уроки из этого, но я застрял в некоторых частях. Следующий фрагмент является логическим, чтобы проверить, находится ли число в поле 3x3, это используется позже в методе solve ().

// we check if a possible number is in its 3x3 box
private boolean isInBox(int row, int col, int number) {
    int r = row - row % 3;
    int c = col - col % 3;

    for (int i = r; i < r + 3; i++)
        for (int j = c; j < c + 3; j++)
            if (board[i][j] == number)
                return true;

    return false;
}

Я просто не понимаю, как это работает. Что делает строка - строка% 3? И тогда в for l oop i

1 Ответ

1 голос
/ 20 февраля 2020

row и col могут иметь любое значение от 0 до 8. Они определяют местоположение в игре судоку 9x9.

Циклы должны проверять поле c 3x3, указывающее местоположение row,col содержится внутри.

int r = row - row % 3; находит индекс первой строки в том же блоке 3x3.

int c = col - col % 3; находит индекс первого столбца в этом же блоке 3x3 .

Оба преобразуют входное значение в выходное:

0 -> 0
1 -> 0
2 -> 0
3 -> 3
4 -> 3
5 -> 3
6 -> 6
7 -> 6
8 -> 6

Затем l oop проверяет каждое местоположение от r,c до r+2,c+2 (включительно), ища указанное значение number.

...