📄
字号:
#include<iostream>
#include<stdlib.h>
#include<iomanip>
using namespace std ;
int tile=0 ;
void chessboard(int **a , int tr , int tc , int dr , int dc , int size) ;
//其中*a[] 表示是二维数组 ,tr表示棋盘坐上角方格的行号 ,tc表示棋盘坐上角方格的列号
//dr表示特殊方格所在的行号 , dc表示特殊方格所在的列号 , size表示棋盘规格(既有几个格)
void chessboard(int **a , 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( a , tr , tc , dr , dc , s) ;
else
{ //此棋盘中无特殊方格
//用t好L型骨牌覆盖右下角
a[tr+s-1][tc+s-1] = t ;
//覆盖其余方格
chessboard(a , tr , tc , tr+s-1 , tc+s-1 , s) ;
}
//覆盖右上角棋盘
if(dr < tr+s && dc >= tc+s)
//特殊方格在此棋盘中
chessboard(a , tr , tr+s , dr , dc , s) ;
else
{ //此棋盘中无特殊方格
//用t好L型骨牌覆盖左下角
a[tr+s-1][tc+s] = t ;
//覆盖其余方格
chessboard( a , tr , tc+s , tr+s-1 , tc+s , s) ;
}
//覆盖左下角棋盘
if(dr >= tr+s && dc < tc+s)
//特殊方格在此棋盘中
chessboard(a , tr+s , tc , dr , dc , s) ;
else
{ //此棋盘中无特殊方格
//用t好L型骨牌覆盖右上角
a[tr+s][tc+s-1] = t ;
//覆盖其余方格
chessboard(a , tr+s , tc , tr+s , tc+s-1 , s) ;
}
//覆盖左下角棋盘
if(dr >= tr+s && dc >= tc+s)
//特殊方格在此棋盘中
chessboard(a , tr+s , tc+s , dr , dc , s) ;
else
{ //此棋盘中无特殊方格
//用t好L型骨牌覆盖左上角
a[tr+s][tc+s] = t ;
//覆盖其余方格
chessboard(a , tr+s , tc+s , tr+s , tc+s , s) ;
}
}
int main()
{
int **b ;
b = new int *[8] ;
for(int r=0 ; r<8 ; r++)
b[r] = new int [8] ;
for(int i=0 ; i<8 ; i++)
for(int j=0 ; j<8 ; j++)
b[i][j] = 0 ;
chessboard(b,0,0,0,1,8);
for(int i=0 ; i<8 ; i++)
for(int j=0 ; j<8 ; j++)
{
cout << setw(3) << b[i][j];
if(j==7)
cout << endl ;
}
system("pause") ;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -