Artikel ini menjelaskan masalah liputan papan catur yang diimplementasikan oleh Java berdasarkan algoritma partisi dan penaklukan. Bagikan untuk referensi Anda, sebagai berikut:
Di papan catur yang terdiri dari kotak 2^K * 2^K, ada kotak yang berbeda dari yang lain. Jika empat domino berbentuk L berikut digunakan untuk menutupi kotak lain kecuali kotak khusus ini, cara menutupinya. Empat domino berbentuk L ditunjukkan di bawah ini:
Kotak khusus di papan catur ditunjukkan pada gambar:
Prinsip dasar implementasi adalah untuk membagi papan catur 2^k * 2^k menjadi empat 2^(k - 1) * 2^(k - 1) Sub -chessboard. Alun-alun khusus harus berada di salah satu kapal selam. Jika kuadrat khusus berada di papan sub-chess tertentu, terus memproses papan sub-chess secara rekursif sampai hanya ada satu kotak di papan sub-chess ini. Jika kuadrat khusus tidak ada di papan sub-chess tertentu, atur posisi yang sesuai di papan sub-chess sebagai nomor domino, konversi papan tanpa kotak khusus menjadi papan sub-chess dengan kuadrat khusus, dan kemudian proses secara rekursif memproses papan sub-chess. Prinsip di atas ditunjukkan pada gambar:
Kode spesifiknya adalah sebagai berikut:
package demo;public class Chess { /*tr indicates the row number of the upper left corner of the chessboard, the column number of the upper left corner of the chessboard, the row number of the special chessboard, dc indicates the column number of the special chessboard*/ public static void ChessBoard(int tr, int tc, int dr, int dc, int size) { if(size == 1) { return; } int t = title ++; int s = ukuran/2; // Tutupi sudut kiri atas papan catur if (dr <tr + s && dc <tc + s) {// kotak khusus di papan catur catur ini (tr, tc, dr, dc, s); } else {// Tidak ada kuadrat khusus di papan ini, tutupi sudut kanan bawah dengan domino berbentuk -L -t -bumber [tr + s -1] [tr + s -1] = t; // Tutupi sisa papan catur persegi (tr, tc, tc + s - 1, tc + s - 1, s); } // Tutupi sudut kanan atas if (dr <tr + s && dc> = tc + s) {// papan catur persegi khusus (tr, tc + s, dr, dc, s); } else {// papan ini memiliki kotak khusus pada siang hari, tutupi sudut kiri bawah dengan domino berbentuk-L-t-bumber [tr + s-1] [tc + s] = t; // Tutupi sisa papan catur persegi (TR, TC + S, TR + S - 1, TC + S, S); } // Tutupi papan catur sudut kiri bawah if (dr> = tr + s && dc <tc + s) {// kotak khusus di papan catur papan ini (tr + s, tc, dr, dc, s); } else {// Tidak ada kuadrat khusus di papan ini, tutup papan sudut kanan atas [tr + s] [tr + s -1] = t; // Tutupi papan catur kotak lainnya (TR, TC, TC + S, TC + S - 1, S); } // Tutupi catur sudut kanan bawah (tr> = tr + s && dc> = tc + s) {// kotak khusus di papan catur papan ini (tr + s, tc + s, dr, dc, s); } else {// Tidak ada kuadrat khusus di papan ini, gunakan domino berbentuk L-Bumber untuk menutupi papan sudut kiri atas [tr + s] [tc + s] = t; // Tutupi papan catur kotak yang tersisa (TR + S, TC + S, TC + S, TC + S, S); }} @Suppresswarnings ("static-access") public static void main (string args []) {System.out.println ("Hasil tes wulin.com:"); Papan [2] [2] = 0; Catur ch = catur baru (); CH.Chessboard (0, 0, 2, 2, ukuran); untuk (int i = 0; i <size; ++ i) {for (int j = 0; j <size; j ++) {System.out.print (board [i] [j]+""); } System.out.println (); }} ukuran int static final = 4; judul int statis = 1; papan int statis [] [] = int baru [ukuran] [ukuran];}Hasil Menjalankan:
Untuk informasi lebih lanjut tentang algoritma java, pembaca yang tertarik dengan situs ini dapat melihat topik: "struktur data java dan tutorial algoritma", "ringkasan tips node dom java", "ringkasan file operasi java dan direktori" dan "ringkasan tip operasi java cache" tips java "tips java" Tips "Java Cache Tips"
Saya harap artikel ini akan membantu pemrograman Java semua orang.