棋盤覆蓋的詳細演算法如下(分治法)

2021-08-09 00:14:34 字數 1558 閱讀 5518

分析陣列board[m][m]表示棋盤該陣列的所有元素

的初值都為0。

①chessboard(0,0,0 ,1 ,4)

t=1,(tile=2,tile的初值1賦給t,而後tile自增1變為2)

s=2;

經判斷特殊方格在棋盤的左上角。

②chessboard(0,0,0 ,1 ,2)

t=2,(tile=3)

s=1;

左上角無特殊方格 board[0][0]=2;

右上角有特殊方格 此時board[0][1]=0

左下角無特殊方格 board[1][0]=2;

右下角無特殊方格 board[1][1]=2;

①chessboard(0,0,0 ,1 ,4)

t=1,(tile=2,tile的初值1賦給t,而後tile自增1變為2)

s=2;

右上角無特殊方格 board[1][2]=1;

③chessboard(0,2,1,2,2)

t=3,(tile=4)

s=1;

左上角無特殊方格 board[0][2]=3;

右上角無特殊方格 board[0][3]=3;

左下角有特殊方格此時board[1][2]=1

右下角無特殊方格 board[1][3]=3;

①chessboard(0,0,0 ,1 ,4)

t=1,(tile=2,tile的初值1賦給t,而後tile自增1變為2)

#include

#include

#include

using namespace std;

int board[4][4];///二維整形陣列4*4的棋盤

int tile=1;///全域性變數,表示l型骨牌號

void initchessboard(int m,int n)///表示初始化

}/**

tr表示棋盤左上角的行號

tc表示棋盤左上角的列號

dr表示特殊方格左上角的列號

dc表示特殊方格左上角的列號

size=2&k

*/void chessboard(int tr,int tc,int dr,int dc,int size)///棋盤覆蓋的分治法如下(結合遞迴)

else

///覆蓋右上角的棋盤

if(dr=tc+s)///在此棋盤中

else

///覆蓋左下角的棋盤

if(dr>=tr+s&&dc///在此棋盤中

else

///覆蓋右下角的棋盤

if(dr>=tr+s&&dc>=tc+s)///在此棋盤中

else

}void output(int n,int m)///輸出覆蓋後的棋盤矩陣

分治法,棋盤覆蓋

分治法 棋盤覆蓋問題 問題描述 在乙個2k x 2k 即 2 k x 2 k 個方格組成的棋盤中,恰有乙個方格與其他方格不同,稱該方格為一特殊方格,且稱該棋盤為一特殊棋盤。在棋盤覆蓋問題中,要用4不同形態的l型骨牌覆蓋給定的特殊棋盤上除特殊方格以外的所有方格,且任何2個l型骨牌不得重疊覆蓋。思想 將...

分治法 棋盤覆蓋

問題描述 在乙個2 k 2 k個方格組成的棋盤中,有乙個方格與其它的不同,若使用以下四種l型骨牌覆蓋除這個特殊方格的其它方格,如何覆蓋。l型 棋盤 基本原理 實現的基本原理是將2 k 2k的棋盤分成四塊2 k 1 2 k 1 的子棋盤,特殊方格一定在其中的乙個子棋盤中,如果特殊方格在某乙個子棋盤中,...

棋盤覆蓋(分治法)

include define maxnum 100 最大規模 using namespace std 變數設定 di 特定棋子橫座標 dj 特定棋子縱座標 hi 棋盤左上角橫座標 hj 棋盤左上角縱座標 tile 棋子序號 board 棋盤 maxnum 棋盤最大規模 int board maxnu...