⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄

📁 棋盘覆盖问题: 1.是8X8的棋盘 2.能动态的演示
💻
字号:
#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 + -