演算法實驗4 棋盤覆蓋

2021-10-09 07:57:30 字數 1112 閱讀 8997

description

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

input

k,dr,dc。k定義如前,dr,dc分別表示特殊方格所在的行號和列號 1= < k < =6

output

按照左上,右上,左下,右下的順序用分治法求解。特殊方格標0,其他位置按上述順序依次標記。

sample input

2 1 1

sample output

2 2 3 3

2 0 1 3

4 1 1 5

4 4 5 5

分析:

在乙個棋盤上存在乙個特殊方格,將其四等分(長寬各減半),然後在不存在特殊方格的其餘三個方格構建「偽」特殊方格,依次遞迴。

#include

#include

#include

#include

using namespace std;

int tile =1;

int board[80]

[80];

void

chessboard

(int tr,

int tc,

int dr,

int dc,

int size)

if(dr=tc+s)

chessboard

(tr,tc+s,dr,dc,s)

;else

if(dr>=tr+s&&dcchessboard

(tr+s,tc,dr,dc,s)

;else

if(dr>=tr+s&&dc>=tc+s)

chessboard

(tr+s,tc+s,dr,dc,s)

;else

}int

main()

cout<}return0;

}

4 棋盤覆蓋

1 問題 在乙個2 k 2 k個方格組成的棋盤中,若有乙個方格與其他方格不同,則稱該方格為一特殊方格,且稱該棋盤為乙個特殊棋盤.顯然特殊方格在棋盤上出現的位置有4 k種情形.因而對任何k 0,有4 k種不同的特殊棋盤.當k 3時,一共有64種特殊棋盤,圖1為其中的一種.用下圖2所示的4種不同形態的l...

棋盤覆蓋演算法

在乙個2k 2k個方格組成的棋盤中,恰有乙個方格與其他方格不同,稱該方格為一特殊方格,且稱該棋盤為一特殊棋盤,顯然特殊方格在棋盤上出現的位置有4k種情形。因而對任何k 0,有4k種不同的特殊棋盤。特殊方格必位於4個較小子棋盤之一中,其餘3個子棋盤中無特殊方格。為了將這3個無特殊方格的子棋盤轉化為特殊...

分治演算法 棋盤覆蓋

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