/*
0 0 0 1 2
*/
#include <stdio.h>
#include <stdlib.h>
#define MAXSIZE 100
int total = 0;
void chessBoard(int, int, int, int, int);
int board[MAXSIZE][MAXSIZE];
int power(int);
int main(void)
{
int i, j;
int tr, tc, dr, dc, k;
int size;
scanf("%d %d %d %d %d", &tr, &tc, &dr, &dc, &k);
size = power(k);
chessBoard(tr, tc, dr, dc, size);
board[dr][dc] = -1;
printf("after chessBoard:\n");
for (i = 0; i < size; ++i)
{
for (j = 0; j < size; ++j)
{
printf("%5d ", board[i][j]);
}
printf("\n");
}
return 0;
}
void chessBoard(int tr, int tc, int dr, int dc, int size)
{
if (1 == size)
{
return ;
}
int t = total++;
int s = size / 2;
//左上角
if (dr < tr + s && dc < tc +s)
{
chessBoard(tr, tc, dr, dc, s);
}
else
{
board[tr + s - 1][tc + s - 1] = t;
chessBoard(tr, tc, tr + s - 1, tc + s - 1, s);
}
//右上角
if (dr < tr + s && dc >= tc + s)
{
chessBoard(tr, tc + s, dr, dc, s);
}
else
{
board[tr + s - 1][tc + s] = t;
chessBoard(tr, tr + s, tr + s - 1, tc + s, s);
}
//左下角
if (dr >= tr + s && dc < tc + s)
{
chessBoard(tr + s, tc, dr, dc, s);
}
else
{
board[tr + s][tc + s - 1] = t;
chessBoard(tr + s, tc, tr + s, tc + s - 1, s);
}
//右下角
if (dr >= tr + s && dc >= tc + s)
{
chessBoard(tr + s, tc + s, dr, dc, s);
}
else
{
board[tr + s][tc + s] = t;
chessBoard(tr + s, tc + s, tr + s, tc + s, s);
}
}
//计算2^n
int power(int n)
{
int i;
int result = 1;
for (i = 0; i < n; ++i)
{
result *= 2;
}
return result;
}
棋盘覆盖
最新推荐文章于 2018-03-20 20:50:48 发布