Алгоритм раскрашивания квадратиков на доске судоку

В настоящее время я пишу графическую программу решения судоку в Java, используя Swing/Awt. Поэтому я решил, что хочу заштриховать блоки (отмеченные более толстыми линиями) на доске так, как они (с блоками 3x3 и 2x3):

(источник: zitowolf.net)

Ширина
(источник: zitowolf.net)


Доска 6x6 и доска 8x8

Плата в программе в основном представлена ​​в виде массива int[dimension][dimension], и программа принимает платы с размерами от 4x4 -> 16x16.

Проблема заключается в том, чтобы убедиться, что поля рядом друг с другом в строке или столбце не имеют одинакового оттенка. Проблема заключается не в самом процессе затенения графического интерфейса, а в том, чтобы выяснить, следует ли закрашивать квадрат как часть затененного блока.

Я часами пытался реализовать простой алгоритм для этой задачи, проходящей через массив с помощью двойного цикла for, но я еще не получил никакого разумного шаблона, и у меня нет идей. Мой алгоритм до сих пор основан на предположении, что все остальные поля должны быть окрашены сверху слева направо и снизу. Это не работает для варианта 6x6, потому что там у вас есть последовательность: цветной ящик->белый ящик->белый ящик.

Может ли кто-нибудь здесь предложить алгоритм или другой подход? Я предоставлю больше информации, если это необходимо. Очень признателен.


person Community    schedule 17.04.2012    source источник


Ответы (1)


person    schedule
comment
Как бы я переписал этот оператор возврата в Java? Компилятор выдает: ... operator ! cannot be applied to int .... - person ; 17.04.2012
comment
Это сработало отлично! Только я изменил части на x/size_y и y/size_x, чтобы они работали с should_shade(i,j,boxWidth,boxHeight), где boxWidth — количество столбцов, а boxHeight — количество строк в поле. Я понятия не имею, почему эта арифметика работает, но это потрясающе! - person ; 17.04.2012
comment
@hesse Это работает, потому что если вы увеличите x / size_x (то есть x-индекс поля, в котором находится этот квадрат) на единицу, он изменит цвет; если вы увеличите y / size_y на единицу, он также изменит цвет. Это определенно удовлетворит ваше требование, чтобы никакие два соседних прямоугольника не были одного цвета. - person Danica; 17.04.2012