Cet article décrit le problème de couverture d'échecs mis en œuvre par Java en fonction de l'algorithme de partitionnement et de conquête. Partagez-le pour votre référence, comme suit:
Dans un échec composé de 2 ^ k * 2 ^ k carrés, il y a un carré différent des autres. Si les quatre dominos en forme de L suivants sont utilisés pour couvrir d'autres carrés à l'exception de ce carré spécial, comment les couvrir. Les quatre dominos en forme de L sont illustrés ci-dessous:
Les carrés spéciaux dans les échecs sont illustrés sur la figure:
Le principe de base de la mise en œuvre est de diviser le 2 ^ k * 2 ^ k échangeur en quatre 2 ^ (k - 1) * 2 ^ (k - 1) sous-échange. Le carré spécial doit être dans l'un des sous-bosses. Si le carré spécial se trouve dans un certain sous-échange, continuez à traiter de manière récursive le sous-bessage jusqu'à ce qu'il n'y ait qu'un seul carré dans ce sous-échange. Si le carré spécial n'est pas dans un certain sous-échange, définissez la position correspondante dans le sous-bessage comme le numéro Domino, convertissez la planche sans carrés spéciaux en sous-basse avec des carrés spéciaux, puis traitez récursivement le sous-échange. Le principe ci-dessus est illustré sur la figure:
Le code spécifique est le suivant:
Demo du package; classe publique Échecs {/ * tr indique le numéro de ligne du coin supérieur gauche du tableau d'échecs, le numéro de colonne du coin supérieur gauche du tableau d'échecs, le numéro de ligne de l'échecs spécial, DC indique le numéro de colonne de l'échecs spécial * / public static Void Chessboard (int tr, int tc, int d, int dc, int size) {if (size == 1) {Return; } int t = title ++; int s = taille / 2; // couvre le coin supérieur gauche du tableau d'échecs if (dr <tr + s && dc <tc + s) {// carré spécial dans cet échec d'échecs (tr, tc, dr, dc, s); } else {// Il n'y a pas de carré spécial dans cette planche, couvrez le coin inférieur droit avec des dominos en forme de L de numéro en T [tr + S - 1] [tr + s -1] = t; // couvre le reste du carré d'échecs (tr, tc, tc + s - 1, tc + s - 1, s); } // Couvrir le coin supérieur droit if (dr <tr + s && dc> = tc + s) {// échangeur carré spécial (tr, tc + s, dr, dc, s); } else {// Cette planche a un carré spécial à midi, couvrez le coin inférieur gauche avec des dominos en forme de L de numéro en T [tr + s - 1] [tc + s] = t; // couvre le reste du carré d'échecs (tr, tc + s, tr + s - 1, tc + s, s); } // Couvrir le panneau d'échecs du coin inférieur gauche if (dr> = tr + s && dc <tc + s) {// carré spécial dans ce tableau d'échecs (tr + s, tc, dr, dc, s); } else {// Il n'y a pas de carré spécial dans cette carte, couvrent la carte d'angle droite supérieure [tr + s] [tr + s -1] = t; // couvre les autres carrés d'échecs (tr, tc, tc + s, tc + s - 1, s); } // Couvrir les échecs du coin inférieur droit (tr> = tr + s && dc> = tc + s) {// carré spécial dans ce tableau d'échecs (tr + s, tc + s, dr, dc, s); } else {// Il n'y a pas de carré spécial dans cette carte, utilisez Domino en forme de numéro en T pour couvrir la carte du coin supérieur gauche [TR + S] [TC + S] = T; // couvre les échecs de carrés restants (TR + S, TC + S, TC + S, TC + S, S); }} @SuppressWarnings ("STATIC-ACCESS") public static void main (String args []) {System.out.println ("Wulin.com Résultats de test:"); Board [2] [2] = 0; Chess ch = new Chess (); Ch.Chessboard (0, 0, 2, 2, taille); pour (int i = 0; i <size; ++ i) {for (int j = 0; j <size; j ++) {System.out.print (Board [i] [j] + ""); } System.out.println (); }} static final int size = 4; Title int statique = 1; Static int board [] [] = new int [size] [size];}Résultats en cours:
Pour plus d'informations sur les algorithmes Java, les lecteurs qui sont intéressés par ce site peuvent afficher les sujets: "Structure de données Java et tutoriel d'algorithme", "Résumé des conseils de nœud de Dom Operation Java", "Résumé du fichier Java et des conseils d'opération de répertoire" et "Résumé des conseils d'opération Java Cache"
J'espère que cet article sera utile à la programmation Java de tous.