古詩詞大全網 - 成語用法 - l型骨牌個數

l型骨牌個數

?L型骨牌:壹個2^k×2^k的棋盤中有壹個特殊方格,所以,用到L型骨牌的個數為(4^k-1)/3,將所有L型骨牌從1開始連續編號,用壹個全局變量t表示。

設全局變量t已初始化為0,分治法求解棋盤覆蓋問題的算法用C++語言描述如下:

void ChessBoard(int tr, int tc, int dr, int dc, int size)

{

int s, t1; //t1表示本次覆蓋所用L型骨牌的編號

if (size == 1) return; //棋盤只有壹個方格且是特殊方格

t1 = ++t; // L型骨牌編號

s = size/2; // 劃分棋盤

if (dr< tr + s && dc< tc + s) //特殊方格在左上角子棋盤中

ChessBoard(tr, tc, dr, dc, s); //遞歸處理子棋盤

else{ //用 t1號L型骨牌覆蓋右下角,再遞歸處理子棋盤

board[tr + s - 1][tc + s - 1] = t1;

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 { //用 t1號L型骨牌覆蓋左下角,再遞歸處理子棋盤

board[tr + s - 1][tc + s] = t1;

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 { //用 t1號L型骨牌覆蓋右上角,再遞歸處理子棋盤

board[tr + s][tc + s - 1] = t1;

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 { //用 t1號L型骨牌覆蓋左上角,再遞歸處理子棋盤

board[tr + s][tc + s] = t1;

ChessBoard(tr+s, tc+s, tr+s, tc+s, s);

多米諾骨牌

是壹種以木頭、骨頭、或塑料為材料制成的長方形骨牌,玩的時候將骨牌按壹定的間距順序排列,用很小的力推倒第壹枚骨牌,後面的骨牌就會壹個接壹個的倒下。

最初,起源於中國的北宋時期,那個時候的骨牌多用畜牧動物的骨頭(比如:牛骨)制作,所以稱其為骨牌;後來,壹位名叫多米諾來自意大利的傳教士把這種骨牌帶去了歐洲,壹開始他把這種骨牌作為禮物送給了他的小女兒,在女兒的玩耍過程中發現了推到骨牌的玩法。

之後他就制作了很多木制的骨牌並創造了更多的玩法,不久之後,木制的骨牌風靡歐洲在世界各地流行起來,骨牌遊戲成了壹項高雅運動,歐洲的人們為感謝多諾米帶來了這項運動,就把這種骨牌遊戲命名為“多諾米骨牌”。