棋盤覆蓋問題

2021-08-14 12:51:49 字數 1063 閱讀 3246

/*

name: 棋盤覆蓋問題

author:

date: 10-01-18 22:28

description:

棋盤覆蓋問題要求在2^k * 2^k 個方格組成的棋盤中,你給定任意乙個特殊點,用一種方案實現對除該特殊點的棋盤實現全覆蓋。

解決方案就是利用分治法,將方形棋盤分成4部分,如果該特殊點在某一部分,我們就去遞迴他,

如果不在某一部分,我們假設乙個點為特殊點,同樣遞迴下去,直到全覆蓋。

每層遞迴都要遍歷4個子方塊,同層子方塊的3個「假特殊方格」使用相同顏色的色塊覆蓋,恰好構成乙個l型骨牌 。

左上角的子棋盤(若不存在特殊方格):則將該子棋盤右下角的那個方格假設為特殊方格;

右上角的子棋盤(若不存在特殊方格):則將該子棋盤左下角的那個方格假設為特殊方格;

左下角的子棋盤(若不存在特殊方格):則將該子棋盤右上角的那個方格假設為特殊方格;

右下角的子棋盤(若不存在特殊方格):則將該子棋盤左上角的那個方格假設為特殊方格;

*/#includeusing namespace std;

const int max = 8;

int tile = 1;

int board[max][max] = ;

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

else //否則標記乙個假設的特殊點,遞迴該部分

if (dr < tr+sz && dc >= tc+sz) //特殊方格在右上角子棋盤

else

if (dr >= tr+sz && dc < tc+sz) //特殊方格在左下角子棋盤

else

if (dr >= tr+sz && dc >= tc+sz) //特殊方格在右下角子棋盤

else

} void printchessboard()

cout << endl;

} }

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 k 0 個方格組成的棋盤中,恰有乙個方格與其他方格不同,稱該方格為特殊方格。顯然,特殊方格在棋盤中可能出現的位置有4k種,因而有4k種不同的棋盤,圖4.10 a 所示是k 2時16種棋盤中的乙個。棋盤覆蓋問題 chess cover problem 要求用圖4.10 b 所示...

棋盤覆蓋問題

棋盤覆蓋問題 time limit 1000ms,special time limit 2500ms,memory limit 32768kb total submit users 103,accepted users 40 problem 10432 no special judgement pr...