棋盤覆蓋問題

2021-08-31 12:06:07 字數 1513 閱讀 4211

演算法分析,以

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