#include<iostream>
#include<iomanip>
using namespace std;
int board[8][8]={0};
static int tt=0; //骨牌的数
void chessboard(int tr,int tc,int dr,int dc,int size){
//退出条件
if(size==1){
return;
}
int s=size/2;//分割棋盘
tt++;
int t=tt;//循环的次数 每循环一次 棋盘上被覆盖掉的编号+1 应该从2开始
//左上角
if(dr<tr+s&&dc<tc+s){
//递归覆盖非特殊方格的其余方格
chessboard(tr,tc,dr,dc,s);
}
else{
//用t号L型骨牌覆盖右下角
board[tr+s-1][tc+s-1]=t;
//递归覆盖其余方格
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{
//用t号L型骨牌覆盖左下角
board[tr+s-1][tc+s]=t;
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;
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;
chessboard(tr+s,tc+s,tr+s,tc+s,s);
}
}
int main(){
int size;
cin>>size;//棋盘的规模
int tr=0,tc=0,dr,dc;//棋盘左上角坐标--确定棋盘位置 棋盘中特殊点位置--标注为1
cin>>dr>>dc;
chessboard(0,0,dr,dc,size);//函数调用
for(int i=0;i<size;i++){
for(int j=0;j<size;j++){
cout<<setw(6)<<board[i][j];
}
cout<<endl;
}
return 0;
}
“相关推荐”对你有帮助么?
-
非常没帮助
-
没帮助
-
一般
-
有帮助
-
非常有帮助
提交