棋盤覆蓋 演算法分析 設計與實現(Java)

2021-07-09 06:41:09 字數 999 閱讀 2298

該篇雖然與很多的部落格、解說一樣講的都是棋盤覆蓋的解法。但是,該篇更多地傾向於「證明」,這也是我與很多讀者都想知道的,而不是開篇就上**。

目錄0,問題描述...1

1,相關部落格...1

2,提出命題...1

3,命題證明...1

4,分析演算法...2

5,**實現...2

k=n(k∈n+)且棋盤中只有乙個特殊方塊時,一定可以用相應的l型骨牌將棋盤覆蓋。

數學歸納法

(1)     

當k=1時,棋盤大小為2*2,無論特殊方塊在哪個格,都有相應的l型骨牌可覆蓋棋盤。即當k=1時命題成立

(2)     

假設:當k=n(k∈n+)時,可用相應的l型骨牌完全覆蓋。則當k=n+1時,棋盤可分為4塊2k*2k的棋盤,令棋盤中間的小方塊為特殊方塊,則由上述假設k=n時可知,另外3塊2k*2k也可以用相應的l型骨牌覆蓋。

綜上,k=n(k∈n+)且棋盤中只有乙個特殊方塊時,一定可以用相應的l型骨牌將棋盤覆蓋。

①   

將2k*2k

的棋盤拆分成4個2k-1*2k-1

②   

將包含特殊方塊的棋盤進行分塊處理。

③   

將不包含特殊方塊的棋盤的靠近中間部分的小方塊假設為特殊的小方塊。

④   

當k=1時退出遞迴

package divideandconquer;

/*** @input包含乙個不同方格的棋盤

* @output已用4種不同形態的l型骨牌覆蓋的棋盤

*/public class chessboard {

/*** 第count塊l型骨牌

*/public static int count = 0;

public static void main(string args) {

int k = 3;

int dr = 2, dc = 2;// 方塊座標

int size = 1 <

棋盤覆蓋 演算法設計與分析

問題描述 在2 k 2 k個方格組成的棋盤中,若恰有乙個方格與其他方格不一樣,則稱這個方格為特殊方格,現在用四種不同形狀的l型骨牌來覆蓋該棋盤中除了特殊方格以外的其他方格。分析 把該棋盤分成四個2 k 1 2 k 1 個子棋盤,則特殊方格一定在某乙個子棋盤中。其餘三個子棋盤無特殊方格。為了用分治策略...

演算法設計與分析之分治法 棋盤覆蓋

棋盤覆蓋問題要求在2 k 2 k 個方格組成的棋盤中,你給定任意乙個特殊點,用一種方案實現對除該特殊點的棋盤實現全覆蓋。建立模型如圖 解決方案就是利用分治法,將方形棋盤分成4部分,如果該特殊點在某一部分,我們就去遞迴他,如果不在某一部分,我們假設乙個點為特殊點,同樣遞迴下去,知道全覆蓋。左上角的子棋...

演算法設計與分析 分治法 棋盤覆蓋問題

tr 子棋盤x座標,tc 子棋盤y座標,dr 特殊方格x座標,dc 特殊方格y座標,size 棋盤邊長 初始tr,tc 0 public void chessboard int tr,int tc,int dr,int dc,int size 覆蓋右下角子棋盤 if dr tr s dc tc s ...