1 #include <stdio.h>
2 #include <stdlib.h>
3 #include<string.h>
4
5 int nCount = 0;
6 int Matrix[100][100];
7
8 void chessBoard(int tr, int tc, int dr, int dc, int size);
9
10 int main()
11 {
12 int size, r, c, row, col;
13 memset(Matrix, 0, sizeof(Matrix));
14 scanf_s("%d", &size);
15 scanf_s("%d%d", &row, &col);
16 chessBoard(0, 0, row, col, size);
17
18 for (r = 0; r < size; r++)
19 {
20 for (c = 0; c < size; c++)
21 {
22 printf("%2d ", Matrix[r][c]);
23 }
24 printf("\n");
25 }
26
27 return 0;
28 }
29
30 void chessBoard(int tr, int tc, int dr, int dc, int size)
31 {
32 int s, t;
33 if (1 == size) return;
34 s = size / 2;
35 t = ++nCount;
36 if (dr < tr + s && dc < tc + s)
37 {
38 chessBoard(tr, tc, dr, dc, s);
39 }
40 else
41 {
42 Matrix[tr + s - 1][tc + s - 1] = t;
43 chessBoard(tr, tc, tr + s - 1, tc + s - 1, s);
44 }
45
46 if (dr < tr + s && dc >= tc + s)
47 {
48 chessBoard(tr, tc + s, dr, dc, s);
49 }
50 else
51 {
52 Matrix[tr + s - 1][tc + s] = t;
53 chessBoard(tr, tc + s, tr + s - 1, tc + s, s);
54 }
55 if (dr >= tr + s && dc < tc + s)
56 {
57 chessBoard(tr + s, tc, dr, dc, s);
58 }
59 else
60 {
61 Matrix[tr + s][tc + s - 1] = t;
62 chessBoard(tr + s, tc, tr + s, tc + s - 1, s);
63 }
64 if (dr >= tr + s && dc >= tc + s)
65 {
66 chessBoard(tr + s, tc + s, dr, dc, s);
67 }
68 else
69 {
70 Matrix[tr + s][tc + s] = t;
71 chessBoard(tr + s, tc + s, tr + s, tc + s, s);
72 }
73
74 }