棋盘覆盖

棋盘覆盖

  1 import java.util.Scanner;
  2 
  3 class chessboardcover {
  4     int size = 8;
  5     int[][] Board = new int[size][size];
  6     static int tile = 1;
  7 
  8     chessboardcover() {
  9         int k = size;
 10         Board[2][2] = 0;
 11         int tr = 0, tc = 0, dr = 2, dc = 2;//dr dc 特殊方格。
 12         ChessB(tr, tc, dr, dc, k);           //tr tc 
 13         int i, j;
 14         for (i = 0; i < size; i++) {
 15             for (j = 0; j < size; j++) {
 16                 System.out.print(Board[i][j] + "    ");
 17             }
 18             System.out.println("\n");
 19         }
 20     }
 21     
 22     chessboardcover(int size)
 23     {
 24         this.size = size;
 25         //this.Board = new int [size][size];
 26         //this.tile = tile;
 27     }
 28 
 29     public void ChessB(int tr, int tc, int dr, int dc, int size) {
 30         if (size == 1)
 31             return;
 32         int t = tile++;
 33         int s = size / 2;
 34         //int t=tile++,s = size / 2;
 35         
 36         //左上
 37         if (dr < tr + s && dc < tc + s) {
 38             ChessB(tr, tc, dr, dc, s);
 39         }
 40         
 41         else {
 42             Board[tr + s - 1][tc + s - 1] = t;
 43             ChessB(tr, tc, tr + s - 1, tc + s - 1, s);
 44         }
 45 
 46         //右上
 47         if (dr < tr + s && dc >= tc + s) {
 48             ChessB(tr, tc + s, dr, dc, s);
 49         }
 50         
 51         else {
 52             Board[tr + s - 1][tc + s] = t;
 53             //ChessB(tr, tc, tr + s - 1, tc + s, s);
 54             ChessB(tr,tc+s,tr+s-1,tc+s,s);
 55         }
 56 
 57         //左下
 58         if (dr >= tr + s && dc < tc + s) {
 59             ChessB(tr + s, tc, dr, dc, s);
 60         }
 61 
 62         else {
 63             Board[tr + s][tc + s - 1] = t;
 64             //ChessB(tr, tc, tr + s, tc + s - 1, s);
 65             ChessB(tr+s, tc, tr + s, tc + s - 1, s);
 66         }
 67 
 68         //右下
 69         if (dr >= tr + s && dc >= tc + s)
 70             ChessB(tr + s, tc + s, dr, dc, s);
 71         
 72         else {
 73             Board[tr + s][tc + s] = t;
 74             ChessB(tr + s, tc + s, tr + s, tc + s, s);
 75         }
 76         
 77     }
 78 
 79     
 80     public void traverse()
 81     {
 82         int i, j;
 83         for (i = 0; i < size; i++) {
 84             for (j = 0; j < size; j++) {
 85                 System.out.print(Board[i][j] + "    ");
 86             }
 87             System.out.println("\n");
 88         }
 89     }
 90     
 91     
 92     public static void main(String args[]) {
 93         //new chessboardcover();
 94         
 95         //这里可以实现size的可变。同理特殊方格dr,dc的改变。
 96         Scanner in = new Scanner(System.in);        
 97         System.out.print("input size:");
 98         int temp_size= in.nextInt();
 99         
100         chessboardcover chess_Object = new chessboardcover(temp_size);
101         chess_Object.ChessB(0022, temp_size);
102         chess_Object.traverse();
103     }

104 } 

posted @ 2012-04-27 16:49  zhengmian  阅读(154)  评论(0编辑  收藏  举报