#include <iostream>
#include <stdio.h>
using namespace std;
int board[100][100]={0};
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 < tr + s && dc < tc + s){ // 特殊方格在此棋盘中
chessBoard(tr, tc, dr, dc, s);}
else {// 此棋盘中无特殊方格
board[tr + s - 1][tc + s - 1] = t; // 用 t 号L型骨牌覆盖右下角
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; // 用 t 号L型骨牌覆盖左下角
// 覆盖其余方格
chessBoard(tr, tc+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; // 用 t 号L型骨牌覆盖右上角
// 覆盖其余方格
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; // 用 t 号L型骨牌覆盖左上角
chessBoard(tr+s, tc+s, tr+s, tc+s, s); // 覆盖其余方格
}
}
int main(){
int n,tr=1,tc=1,dr,dc,size,m;
cout<<"size=";
cin>>size;
cout<<"dr=";
cin>>dr;
cout<<"dc=";
cin>>dc;
chessBoard(tr,tc,dr,dc,size+1);
for(int i=1;i<=size;i++){
for(int j=1;j<=size;j++){
cout.width(3);
cout<<board[i][j];
if(j==size){
cout<<endl;
}
}
}
}
棋盘覆盖
最新推荐文章于 2021-03-22 12:35:49 发布