棋盘覆盖
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( 0, 0, 2, 2, temp_size);
102 chess_Object.traverse();
103 }
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( 0, 0, 2, 2, temp_size);
102 chess_Object.traverse();
103 }
104 }