代码
#include<iostream>
using namespace std;
int ncount=0;//计算L型骨牌的数量
int matrix[100][100]={0};
void chessBoard(int tr,int tc,int dr,int dc,int size)
//tr 左上角方格的行号 tc 左上角方格的列号
//dr 特殊方格的行号 dc 特殊方格的列号 size 棋盘的大小
{
int s,t;
if(size ==1)
return ;
s=size/2;//棋盘进行分割
t=++ncount;//t表示方格编号
if(dr<tr+s && dc<tc+s){
chessBoard(tr,tc,dr,dc,s);//左上角
}
else{
matrix[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{
matrix[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{
matrix[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{
matrix[tr+s][tc+s] = t;
chessBoard(tr+s,tc+s,tr+s,tc+s,s);
}
}
int main()
{
int size,row,col;
cout<<"请输入棋盘大小,特殊方格的行号、列号\n";
cin>>size>>row>>col;
chessBoard(0,0,row,col,size);
for(int r=0;r<size;r++){
for(int c=0;c<size;c++){
cout<<matrix[r][c]<<" ";
}
cout<<endl;
}
return 0;
}
辅助图
参考资料
B站视频 视频