棋盘覆盖问题

棋盘覆盖问题_第1张图片棋盘覆盖问题_第2张图片棋盘覆盖问题_第3张图片棋盘覆盖问题_第4张图片棋盘覆盖问题_第5张图片棋盘覆盖问题_第6张图片棋盘覆盖问题_第7张图片棋盘覆盖问题_第8张图片棋盘覆盖问题_第9张图片


 //棋盘覆盖问题
/*
(tr,tc)是棋盘左上角的方格坐标
(dr,dc)是特殊方格所在的坐标
size是棋盘的行数和列数 
*/ 
#include
using namespace std;
int board[1025][1025];
static int tile = 1;

void ChessBoard(int tr,int tc,int dr,int dc,int size)
{
	if(size==1) return ;//递归边界 
	
	int t=tile++;//L型骨牌号 
	int s=size/2;//分割棋盘 
	//覆盖左上角子棋盘 
	if(dr=tc+s)
		ChessBoard(tr,tc+s,dr,dc,s);//特殊方格在此棋盘中
	else //此棋盘中无特殊方格,用t号L型骨牌覆盖左下角 
	{
		board[tr+s-1][tc+s]=t;
		//覆盖其余方格 
		ChessBoard(tr,tc+s,tr+s-1,tc+s,s);
	}
	//覆盖左下角子棋盘 
	if(dr>=tr+s && dc=tr+s && dc>=tc+s)//特殊方格在此棋盘中
		ChessBoard(tr+s,tc+s,dr,dc,s);
	else //此棋盘中无特殊方格,用t号L型骨牌覆盖左上角 
	{
		board[tr+s][tc+s]=t;
		//覆盖其余方格 
		ChessBoard(tr+s,tc+s,tr+s,tc+s,s);
	}
}

int main()
{
	int i,j;
	int k;
	while(cin>>k)
	{
		int size = 1<>x>>y;  
		board[x][y]=0;
		ChessBoard(0, 0, x, y, size);
		for(i=0; i



你可能感兴趣的:(分治)