2 2 3 3
2 -1 1 3
4 1 1 5
4 4 5 5
#include "stdio.h"
int board[65][65], tile; /* tile 为纸片编号*/
void chessboard(int tr, int tc, int dr, int dc, int size)
/* dr,dc依次为特殊方格的行、列号 */
{
int t, s;
if (size == 1)
1;
t = tile++;
s = size / 2;
if ( 2 )
chessboard(tr, tc, dr, dc, s);
else
{
board[tr + s - 1][tc + s - 1] = t;
3;
}
if (dr < tr + s && dc >= tc + s)
chessboard(tr, tc + s, dr, dc, s);
else {
board[tr + s - 1][tc + s] = t;
4;
}
if (dr >= tr + s && dc < tc + s)
chessboard(tr + s, tc, dr, dc, s);
else {
board[tr + s][tc + s - 1] = t;
5;
}
if (dr >= tr + s && dc >= tc + s)
chessboard(tr + s, tc + s, dr, dc, s);
else {
board[tr + s][tc + s] = t;
6;
}
}
void prt1(int b[][65], int n) {
int i, j;
for (i = 1; i <= n; i++) {
for (j = 1; j <= n; j++)
printf("%3d", b[i][j]);
printf("\n");
}
}
int main(void) {
int size, dr, dc;
printf("input size(4/8/16/64):\n");
scanf("%d", &size);
printf("input the position of special block(x,y):\n");
scanf("%d%d", &dr, &dc);
board[dr][dc] = -1;
tile++;
chessboard(1, 1, dr, dc, size);
prt1(board, size);
} 