在乙個2^k * 2k(k為正整數,k<=10,length=2k)個方格組成的棋盤中,恰有乙個方格與其他方格不同,稱該方格為一特殊方格(其座標為aa,bb,分別代表行座標號和列座標號),以及有四種l型骨牌(如下圖)。求用若干塊這種l型骨牌實現除該特殊點棋盤的全覆蓋。(本題要求採用分治演算法做)
輸入格式:
輸入三個數,分別是aa,bb,length.
輸出格式:
輸出整個棋盤。其中特殊方格填為0,然後鋪棋盤的順序為:先鋪四個子棋盤交界的部分,然後遞迴的對每個子棋盤按照左上,右上,右下,左下的順時針順序鋪滿棋盤。每一塊骨牌中三個方格數字相同,按照順序標號,即第一塊骨牌全標為1,第二塊骨牌全標為2,…,以此類推。輸出的每個數占4個場寬,右對齊。
輸入樣例:
1 1 4
表示:特殊格仔為(1,1),棋盤有4行4列。
輸出樣例:
0 2 3 3
2 2 1 3
5 1 1 4
5 5 4 4
表示:先鋪三個1(一塊l型骨牌),再鋪三個2,…,最後鋪三個5.
#include
using namespace std;
#define max 1025
int def[max]
[max]=;
static
int t=0;
void
chess
(int a,
int b,
int aa,
int bb,
int length)
else
//右上
if(aa=b+l)
else
//右下
if(aa>=a+l && bb>=b+l)
else
//左下
if(aa>=a+l && bbelse
}int
main()
}
棋盤覆蓋問題
source code include include include using namespace std const int n 1024 int board n n count void cover int sx,int sy,int cx,int cy,int size,int cx1,i...
棋盤覆蓋演算法
在乙個2k 2k個方格組成的棋盤中,恰有乙個方格與其他方格不同,稱該方格為一特殊方格,且稱該棋盤為一特殊棋盤,顯然特殊方格在棋盤上出現的位置有4k種情形。因而對任何k 0,有4k種不同的特殊棋盤。特殊方格必位於4個較小子棋盤之一中,其餘3個子棋盤中無特殊方格。為了將這3個無特殊方格的子棋盤轉化為特殊...
棋盤覆蓋問題
問題 在乙個2k 2k k 0 個方格組成的棋盤中,恰有乙個方格與其他方格不同,稱該方格為特殊方格。顯然,特殊方格在棋盤中可能出現的位置有4k種,因而有4k種不同的棋盤,圖4.10 a 所示是k 2時16種棋盤中的乙個。棋盤覆蓋問題 chess cover problem 要求用圖4.10 b 所示...