残缺棋盘问题
残缺棋盘是一个2^k*2^k个方格的棋盘,其中恰好有一个方格残缺,现在要求用三格板覆盖棋盘,在此覆盖中两块三格板不能重叠,三格板也不能覆盖在残缺的方格上。
#include
#include
#include
using namespace std;
const int N = 104;
int board[N][N]; //棋盘大小
int tile = 1; //L型骨牌号
void TileBoard(int tr, int tc, int dr, int dc, int size)
{
if(size==1) return ;
int t=tile++;
int s=size/2; //分割棋盘
if(dr
=tc+s) TileBoard(tr, tc+s, dr, dc, s); else { board[tr+s-1][tc+s]=t; TileBoard(tr, tc+s, tr+s-1, tc+s, s); } if(dr>=tr+s&&dc
=tr+s&&dc>=tc+s) TileBoard(tr+s, tc+s, dr, dc, s); else { board[tr+s][tc+s]=t; TileBoard(tr+s, tc+s, tr+s, tc+s, s); } } int main() { int size; cin>>size; //输入棋盘大小 int tr, tc, dr, dc; tr=tc=size; cin>>dr>>dc; //输入残缺点 board[dr][dc]=0; TileBoard(0, 0, dr, dc, size); for(int i=0; i