/*
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...