//tr子棋盘左上角方格所在行
//tc子棋盘左上角方格所在列
//dr残缺方块所在行
//dc残缺方块所在列
//size棋盘的行数或列数
int amount=0,board[maxn][maxn];
void cover(int tr,int tc,int dr,int dc,int size){
if(size<2)return;
amount++;
int t=amount;
int s=size/2;
if(dr<tr+s&&dc<tc+s){//残缺格子在左上的方格里
cover(tr,tc,dr,dc,s);
board[tr+s][tc+s-1]=t;
board[tr+s][tc+s]=t;
board[tr+s-1][tc+s]=t;
cover(tr,tc+s,tr+s-1,tc+s,s);
cover(tr+s,tc,tr+s,tc+s-1,s);
cover(tr+s,tc+s,tr+s,tc+s,s);
}
else if(dr>=tr+s&&dc<tc+s){//左下
cover(tr+s,tc,dr,dc,s);
board[tr+s-1][tc+s-1]=t;
board[tr+s-1][tc+s]=t;
board[tr+s][tc+s]=t;
cover(tr,tc,tr+s-1,tc+s-1,s);
cover(tr,tc+s,tr+s-1,tc+s,s);
……
}
}
残缺棋盘问题
最新推荐文章于 2024-03-12 22:47:54 发布