В настоящее время я пишу графическую программу решения судоку в Java
, используя Swing/Awt. Поэтому я решил, что хочу заштриховать блоки (отмеченные более толстыми линиями) на доске так, как они (с блоками 3x3 и 2x3):
(источник: zitowolf.net)
Ширина
(источник: zitowolf.net)
Доска 6x6 и доска 8x8
Плата в программе в основном представлена в виде массива int[dimension][dimension]
, и программа принимает платы с размерами от 4x4 -> 16x16.
Проблема заключается в том, чтобы убедиться, что поля рядом друг с другом в строке или столбце не имеют одинакового оттенка. Проблема заключается не в самом процессе затенения графического интерфейса, а в том, чтобы выяснить, следует ли закрашивать квадрат как часть затененного блока.
Я часами пытался реализовать простой алгоритм для этой задачи, проходящей через массив с помощью двойного цикла for, но я еще не получил никакого разумного шаблона, и у меня нет идей. Мой алгоритм до сих пор основан на предположении, что все остальные поля должны быть окрашены сверху слева направо и снизу. Это не работает для варианта 6x6, потому что там у вас есть последовательность: цветной ящик->белый ящик->белый ящик.
Может ли кто-нибудь здесь предложить алгоритм или другой подход? Я предоставлю больше информации, если это необходимо. Очень признателен.