В этой статье описывается проблема с охватом шахматной доски, реализованную Java на основе алгоритма разбиения и завоевания. Поделитесь этим для вашей ссылки, следующим образом:
В шахматной доске, состоящей из 2^K * 2^K квадратов, существует квадрат, который отличается от других. Если следующие четыре L-образные домино используются для покрытия других квадратов, кроме этого специального квадрата, как их покрыть. Четыре L-образные домино показаны ниже:
Специальные квадраты в шахматной доске показаны на рисунке:
Основной принцип реализации состоит в том, чтобы разделить 2^k * 2^k -шахматную доску на четыре 2^(k - 1) * 2^(k - 1) суб -базовый доска. Специальный квадрат должен быть на одном из подхемессов. Если специальный квадрат находится в определенной суб-перецборке, продолжайте рекурсивно обрабатывать суб-перецборку до тех пор, пока в этой суб-перецборке не появится только один квадрат. Если специальный квадрат не находится в определенной суб-перецборке, установите соответствующую позицию в подборенной доске в качестве номера Domino, преобразуйте плату без специальных квадратов в суб-базовую доску со специальными квадратами, а затем рекурсивно обрабатывает суб-перецборку. Приведенный выше принцип показан на рисунке:
Конкретный код заключается в следующем:
Пакет демонстрация; открытый класс шахмат { /*tr указывает номер строки верхнего левого угла шахматичного доска, номер столбца верхнего левого угла шахматной доски, номер строки специальной шахматной доски, DC указывает на номер столбца специальной шахматной доски* / public static void chemboard (int tr, int tc, int dr, int dc, int size) {if size == 1) {int rate = rate {int rabit {int rate {int rabt {int rabt {int rabit {int rabite {int rate = rabt {int rabit {size == 1) {size == 1) {size == 1). } int t = title ++; int s = размер/2; // покрыть верхний левый угол шахматной доски if (dr <tr + s && dc <tc + s) {// Специальный квадрат в этой шахматной доске (TR, TC, DR, DC, S); } else {// В этой плате нет специального квадрата, накрыть нижний правый угол с помощью T -Number L -образных домино [tr + s -1] [tr + s -1] = t; // покрыть оставшуюся часть квадратной шахматной доски (TR, TC, TC + S - 1, TC + S - 1, S); } // покрыть верхний правый угол if (dr <tr + s && dc> = tc + s) {// Специальная квадратная шахматная доска (tr, tc + s, dr, dc, s); } else {// Эта плата имеет специальный квадрат в полдень, покрыть нижний левый угол с помощью T-Number L-образных домино [TR + S-1] [TC + S] = T; // покрыть оставшуюся часть квадратной шахматной доски (TR, TC + S, TR + S - 1, TC + S, S); } // покрыть шахматную доску в нижнем углу if (dr> = tr + s && dc <tc + s) {// Специальный квадрат в этой шахматной доске (TR + S, TC, DR, DC, S); } else {// В этой плате нет специального квадрата, охватите верхнюю правую плату [tr + s] [tr + s -1] = t; // покрывать другие квадраты шахматной доски (TR, TC, TC + S, TC + S - 1, S); } // покрыть шахматную доску нижнего правого углового (tr> = tr + s && dc> = tc + s) {// Специальный квадрат в этой шахматной доске (TR + S, TC + S, DR, DC, S); } else {// В этой плате нет специального квадрата, используйте T-Number L-образный Domino, чтобы покрыть верхнюю левую плату [TR + S] [TC + S] = T; // покрыть оставшуюся шахматную доску (TR + S, TC + S, TC + S, TC + S, S); }} @Suppresswarnings ("static-access") public static void main (string args []) {system.out.println ("wulin.com Результаты теста:"); Доска [2] [2] = 0; Шахматы ch = new Chess (); ch.chessboard (0, 0, 2, 2, размер); for (int i = 0; i <size; ++ i) {for (int j = 0; j <size; j ++) {System.out.print (poard [i] [j]+""); } System.out.println (); }} статический конечный int size = 4; статический титул int = 1; Статическая плата int [] [] = new int [size] [size];}Результаты работы:
Для получения дополнительной информации об алгоритмах Java, читатели, которые заинтересованы в этом сайте, могут просмотреть темы: «Учебное пособие по структуре данных Java и алгоритм», «Сводка операции Java Dom Node», «Сводка Java File и каталог
Я надеюсь, что эта статья будет полезна для всех Java Programming.