Este artículo describe el problema de cobertura del tablero de ajedrez implementado por Java basado en el algoritmo de partición y conquista. Compártelo para su referencia, como sigue:
En un tablero de ajedrez compuesto por cuadrados 2^k * 2^k, hay un cuadrado que es diferente de los demás. Si se utilizan las siguientes cuatro fomino en forma de L para cubrir otros cuadrados, excepto este cuadrado especial, cómo cubrirlos. Las cuatro fomino en forma de L se muestran a continuación:
Los cuadrados especiales en el tablero de ajedrez se muestran en la figura:
El principio básico de implementación es dividir el tablero de ajedrez 2^k * 2^k en cuatro 2^(k - 1) * 2^(k - 1) Sub -Chessboard. El cuadrado especial debe estar en una de las tablas sub-Chess. Si el cuadrado especial está en un determinado tablero de subcampletas, continúe procesando recursivamente el tablero de sub-chess hasta que solo haya un cuadrado en este tablero de subcamplimiento. Si el cuadrado especial no está en un determinado tablero de subconchores, establezca la posición correspondiente en el tablero de subcampletas como el número de dominó, convierta el tablero sin cuadrados especiales en un tablero de sub-renovado con cuadrados especiales y luego procese recursivamente el tablero subchess. El principio anterior se muestra en la figura:
El código específico es el siguiente:
demostración del paquete; ajedrez de clase pública { /*TR indica el número de fila de la esquina superior izquierda del tablero de ajedrez, el número de columna de la esquina superior izquierda del tablero de ajedrez, el número de fila del tablero de ajedrez especial, DC indica el número de columna del tablero de ajedrez especial* / Public Static Void Chessboard (int TR, int tc, int Dr, int dc, int) {si (tamaño == 1) {retorno estático estático estático. } int t = title ++; int s = tamaño/2; // Cubra la esquina superior izquierda del tablero de ajedrez if (dr <tr + s && dc <tc + s) {// cuadrado especial en este tablero de ajedrez (tr, tc, dr, dc, s); } else {// No hay un cuadrado especial en este tablero, cubra la esquina inferior derecha con dominó en forma de L en el número T [Tr + S -1] [Tr + S -1] = t; // Cubra el resto del tablero de ajedrez cuadrado (TR, TC, TC + S - 1, TC + S - 1, S); } // Cubra la esquina superior derecha if (dr <tr + s && dc> = tc + s) {// special cuadrado de ajedrez (tr, tc + s, dr, dc, s); } else {// Esta placa tiene un cuadrado especial al mediodía, cubra la esquina inferior izquierda con dominó en forma de L en el número T [TR + S-1] [TC + S] = t; // Cubra el resto del tablero de ajedrez cuadrado (TR, TC + S, TR + S - 1, TC + S, S); } // Cubra el tablero de ajedrez de la esquina inferior izquierdo if (DR> = TR + S && DC <tc + s) {// Square Special en este tablero de ajedrez (TR + S, TC, DR, DC, S); } else {// No hay un cuadrado especial en este tablero, cubra el tablero de esquina superior derecho [Tr + S] [tr + S -1] = t; // Cubra el tablero de ajedrez de otros cuadrados (TR, TC, TC + S, TC + S - 1, S); } // Cubra el tablero de ajedrez de la esquina inferior derecha (tr> = tr + s && dc> = tc + s) {// cuadrado especial en este tablero de ajedrez (tr + s, tc + s, dr, dc, s); } else {// No hay un cuadrado especial en este tablero, use el dominó en forma de L-number t para cubrir la placa de la esquina superior izquierda [TR + S] [tc + s] = t; // Cubra el tablero de ajedrez de cuadrados restantes (TR + S, TC + S, TC + S, TC + S, S); }} @SuppressWarnings ("static-access") public static void main (string args []) {system.out.println ("Wulin.com Resultados de la prueba:"); Junta [2] [2] = 0; Ajedrez ch = nuevo ajedrez (); ch.chessboard (0, 0, 2, 2, tamaño); for (int i = 0; i <size; ++ i) {for (int j = 0; j <size; j ++) {system.out.print (tablero [i] [j]+""); } System.out.println (); }} static final int size = 4; static int title = 1; static int Board [] [] = new int [size] [size];}Resultados de ejecución:
Para obtener más información sobre los algoritmos de Java, los lectores interesados en este sitio pueden ver los temas: "Estructura de datos Java y tutorial de algoritmo", "Resumen de las puntas de nodo de operación de Java DOM", "Resumen de Java Archivo y TIPS de operación de directorio" y "Summary of Java Cache Operation Tips" TIPS ""
Espero que este artículo sea útil para la programación Java de todos.