이 기사에서는 파티셔닝 및 정복 알고리즘을 기반으로 Java가 구현 한 Chessboard 커버리지 문제에 대해 설명합니다. 다음과 같이 참조에 대해 공유하십시오.
2^k * 2^K 제곱으로 구성된 체스 판에는 다른 사각형과 다른 사각형이 있습니다. 다음 4 개의 L 자형 도미노 가이 특수 광장을 제외한 다른 사각형을 덮는 데 사용되는 경우,이를 덮는 방법. 4 개의 L 자형 도미노는 다음과 같습니다.
체스 판의 특수 사각형은 그림에 나와 있습니다.
구현의 기본 원칙은 2^k * 2^k 체스 보드를 4 개의 2^(k -1) * 2^(k -1) 하위 체스 보드로 나누는 것입니다. 특수 광장은 하위 체스 보드 중 하나에 있어야합니다. 특수 광장이 특정 하위 체스 판에있는 경우이 하위 체스 보드에 사각형이 하나만있을 때까지 하위 체스 보드를 계속해서 처리하십시오. 특수 광장이 특정 하위 체스 보드에 있지 않은 경우 하위 체스 보드의 해당 위치를 도미노 번호로 설정하고 특수 사각형없이 보드를 특수 사각형이있는 하위 체스 보드로 변환 한 다음 하위 체스 보드를 재귀 적으로 처리하십시오. 위의 원리는 그림에 나와 있습니다.
특정 코드는 다음과 같습니다.
패키지 데모; 공개 클래스 체스 { /*tr는 체스 보드의 왼쪽 상단 모서리의 행 번호, 체스 판의 왼쪽 상단의 열 번호, 특수 체스 보드의 행 번호는 특수 체스 보드의 열 번호* / public static void Chessboard (int tr, int tc, int dc, int dc, int size)를 나타냅니다. } int t = title ++; int s = size/2; // Chessboard의 왼쪽 상단 모서리를 덮으십시오 if (dr <tr + s && dc <tc + s) {//이 Chessboard Chessboard (Tr, tc, dr, dc, s); } else {//이 보드에는 특수 정사각형이 없으며, 오른쪽 하단 코너를 T- 덤프 L 자형 도미노로 덮으십시오 [tr + s -1] [tr + s -1] = t; // 나머지 정사각형 체스 보드 (tr, tc, tc + s -1, tc + s -1, s)를 덮습니다. } // (dr <tr + s && dc> = tc + s) {// 특수 정사각형 체스 보드 (tr, tc + s, dr, dc, s); } else {//이 보드는 정오에 특수 정사각형이 있으며, 왼쪽 하단 모서리를 t- 너 러 링 된 도미노로 덮습니다 [tr + s-1] [tc + s] = t; // 나머지 정사각형 체스 보드 (tr, tc + s, tr + s -1, tc + s, s)를 덮습니다. } // (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 자형 도미노를 사용하여 왼쪽 상단 코너 보드 [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 = 새로운 체스 (); ch.chessboard (0, 0, 2, 2, 크기); for (int i = 0; i <size; ++ i) {for (int j = 0; j <size; j ++) {system.out.print (보드 [i] [j]+""); } system.out.println (); }} 정적 최종 int 크기 = 4; 정적 int 제목 = 1; static int board [] [] = new int [size] [size];}실행 결과 :
Java 알고리즘에 대한 자세한 내용은이 사이트에 관심이있는 독자들이 주제를 볼 수 있습니다. "Java 데이터 구조 및 알고리즘 자습서", "Java Operation Dom Node Tips 요약", "Java 파일 및 디렉토리 작동 팁 요약"및 "Java Cache Operation Tips의 요약"을 볼 수 있습니다.
이 기사가 모든 사람의 Java 프로그래밍에 도움이되기를 바랍니다.