題目描述
在乙個2^k * 2^k個方格組成的棋盤中,若恰有乙個方格與其它方格不同,則稱該方格為一特殊方格,稱改棋盤為一特殊棋盤。顯然特殊方格在棋盤上出現的位置有4^k種情形。因而對任何k>=0,有4^k種不同的特殊棋盤。下圖所示的特殊棋盤為k=2時16個特殊棋盤中的乙個。
在棋盤覆蓋問題中,要用下圖中4中不同形態的l型骨牌覆蓋乙個給定的特殊棋牌上除特殊方格以外的所有方格,且任何2個l型骨牌不得重疊覆蓋。易知,在任何乙個2^k * 2^k的棋盤中,用到的l型骨牌個數恰為(4^k-1)/3。
輸入 輸入正方形的變成n,n一定是2的整數次冪,另外還有兩個數是特殊方格的位置
輸出 輸出擺放的方案,特殊方格用0表示,兩個整數之間用乙個空格隔開,行末沒有空格。
注意,要按照從上到下,從左到右的順序依次給他們編號,具體見樣例
樣例輸入
4 1 1
樣例輸出
0 1 2 2
1 1 3 2
4 3 3 5
4 4 5 5
提示 n小於100
很經典的例題對不對;
其實我們遞迴分治就好了;
對於乙個正方形,裡面有乙個點空缺;
那麼我們把正方形一半一半,分成4份;
其中有乙份就是有個空缺的;
那我們把另外三份的交接點上放乙個l型的塊;
這樣的話洗個小正方形都有乙個空缺,直接遞迴
#include
#define ll long long
using namespace std;
const int n=1e2+5;
int a[n][n],ll;
int n,x,y;
void dfs(int
x,int xx,int
y,int yy,int x,int y,int z)
void dfs(int i,int j,int z)
int main()
printf("\n");}}
有人寫的**竟然比我短,我靠 棋盤覆蓋 分治
問題描述 在乙個2 k 2 k k 0 個方格組成的棋盤中,恰有乙個方格與其他方格不同,稱該方格為特殊方格。顯然,特殊方格在棋盤中可能出現的位置有 4 k種,因而有 4 k種不同的棋盤,圖 a 所示是 k 2時 16種棋盤中的乙個。棋盤覆蓋問題 chess cover problem 要求用圖 b ...
棋盤覆蓋 分治
include pch.h include iostream using namespace std 棋盤問題,分治演算法 int q 1024 1024 棋盤陣列,全域性變數 static int tile 1 骨牌編號 tr 棋盤左上角行數,tc 棋盤左上角列數,dr 特殊方格所在行數,dc 特...
分治法,棋盤覆蓋
分治法 棋盤覆蓋問題 問題描述 在乙個2k x 2k 即 2 k x 2 k 個方格組成的棋盤中,恰有乙個方格與其他方格不同,稱該方格為一特殊方格,且稱該棋盤為一特殊棋盤。在棋盤覆蓋問題中,要用4不同形態的l型骨牌覆蓋給定的特殊棋盤上除特殊方格以外的所有方格,且任何2個l型骨牌不得重疊覆蓋。思想 將...