演算法分析,以
4*4的方格為例,特殊方格只能在左上,右上,左下,右下四個區間中的乙個。排列形式可能是如下幾種 (
1)特殊方格在左上區域,那麼其他幾個區域的特殊方格可定,一定分布方式如下,用
1標識其他幾個區域的特殊方格
1 1
1
(2)特殊方格在右上區域,那麼其他幾個區域的特殊方格可定,一定分布方式如下,用
1標識其他幾個區域的特殊方格
1 1
1
(3)特殊方格在左下區域,那麼其他幾個區域的特殊方格可定,一定分布方式如下,用
1標識其他幾個區域的特殊方格
1 11
(4)特殊方格在右下區域,那麼其他幾個區域的特殊方格可定,一定分布方式如下,用
1標識其他幾個區域的特殊方格
1 1
1 因此問題分解為特殊方格在乙個區域,其餘三個
1分別變成三個不同區域的特殊方格,確定這三個方格的位置後,再分別對這四個區域進行遞迴解決子問題直到問題的解為最小解。
**:
//棋盤覆蓋問題,by lilywangcn
public class checkboard
public static void checkboard(int tr, int tc, int dr,int dc, int size)else
//左下區域
if(dr>=tr+edge&& dc=tr+edge&& dc>=tc+edge)else
tile++;
// system.out.println("tile:" +tile);
// print();
} }private static void print(){
for(int i=0;i執行結果:
size=2的時候:4*4=16
0 0 0 0
0 -1 0 0
0 0 0 0
0 0 0 0
after :
0 0 0 0
0 -1 1 0
0 1 1 0
0 0 0 0
size=3的時候:8*8=64;
0 0 0 0 0 0 0 0
0 -1 0 0 0 0 0 0
0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
after:
0 0 0 0 0 0 0 0
0 -1 1 0 0 2 2 0
0 1 1 0 0 0 2 0
0 0 0 0 2 0 0 0
0 0 0 3 4 0 0 0
0 3 0 0 0 0 4 0
0 3 3 0 0 4 4 0
0 0 0 0 0 0 0 0
棋盤覆蓋問題
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...