棋盘覆盖

棋盘覆盖

//棋盘覆盖
#include<iostream>
#include<cmath>
using namespace std;

int tile;
int k;
int board[100][100];

void printChessBoard(int s)
{
	for (int i = 0; i < s; i++)
	{
		for (int j = 0; j < s; j++)
			cout << board[i][j];
		cout << endl;
	}
}

void chessBoard(int tx, int ty, int dx, int dy, int size)
{
	if (size == 1)
		return;
	int t = tile++;
	int s = size / 2;
	if (dx < tx + s && dy < ty + s) //left-top
	{
		chessBoard(tx, ty, dx, dy, s);
	}
	else
	{
		board[tx + s - 1][ty + s - 1] = t;
		chessBoard(tx, ty, tx + s - 1, ty + s - 1, s);
	}

	if (dx >= tx + s && dy < ty + s) //right-top
	{
		chessBoard(tx + s, ty, dx, dy, s);
	}
	else
	{
		board[tx + s][ty + s - 1] = t;
		chessBoard(tx + s, ty, tx + s, ty + s - 1, s);
	}

	if (dx < tx + s && dy >= ty + s) //left-bottom
	{
		chessBoard(tx, ty + s, dx, dy, s);
	}
	else
	{
		board[tx + s - 1][ty + s] = t;
		chessBoard(tx, ty + s, tx + s - 1, ty + s, s);
	}

	if (dx >= tx + s && dy >= ty + s) //right-bottom
	{
		chessBoard(tx + s, ty + s, dx, dy, s);
	}
	else
	{
		board[tx + s][ty + s] = t;
		chessBoard(tx + s, ty + s, tx + s, ty + s, s);
	}

}

int main()
{
	int x, y;
	while (cin >> k >> x >> y)
	{
		tile = 0;
		memset(board, 0, sizeof(board));
		chessBoard(0, 0, x, y, k);
		printChessBoard(k);
	}
	return 0;
}

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注