poj1753 搜尋,列舉法

2022-09-12 18:33:10 字數 1169 閱讀 1279

1

/ - 2014.3.1

2///

poj175334

/**5*題意:

6*給你乙個4*4的黑白棋盤,通過翻棋子使棋盤變為全白或全黑,

7*(以下「翻乙個位置」皆指翻著個位置和它周圍的四個棋子。)

8*翻子時四周的四個棋子如果存在的話顏色也會跟著改變。

9*問最少需要多少步可以使棋盤變為一種顏色。

10**

11*思路:

12*每一次翻子會改變這個棋子和它周圍的四個棋子的顏色,

13*所以在乙個解中乙個位置的棋子只應翻一次,

14*同時在不同的位置間翻子的順序是對最後翻完後的結果沒有影響的。

15*所以可以逐次翻每乙個位置,如果翻到最後發現不能使棋盤一色,

16*則回過頭來將這個位置翻回來。接著往下翻。

17*/

1819 #include 20 #include 21 #include 22

using

namespace

std;

2324

int chess; ///

二進位制末16位表示棋盤,1表示黑、0表示白

25int

step;

26bool flag = false; ///

標記是否是已經找到解

2728

void flip(int i) ///

翻子函式

2936

37void dfs(int i,int deep) ///

deep表示搜尋的深度,也是翻棋子的次數

3843

if( i>15 || flag ) return;44

flip(i);

45 dfs(i+1,deep+1

);46

if( !flag )

50return;51

}5253void

init()

5462}63

}6465int

main( )

6677

if( !flag )

78 cout<<"

impossible

"<79else

80 cout81return0;

82 }

廣度搜尋 POJ 1753

題意 乙個4 4的棋盤,每個格仔放著乙個棋子。棋子一面是白色,一面是黑色。一次操作可以將某乙個格仔以及上下左右共5個格仔的棋子都翻過來,即白色變黑色,黑色變白色。現在給出一種棋盤狀態,問最少需要幾次操作可以將棋盤全部變為同種顏色。輸入 sample input bwwb bbwb bwwb bwww...

poj 1753 位壓縮 搜尋

題意 有乙個4 4的方格,每個方格中放一粒棋子,這個棋子一面是白色,一面是黑色。遊戲規則為每次任選16顆中的一顆,把選中的這顆以及它四周的棋子一併反過來,當所有的棋子都是同乙個顏色朝上時,遊戲就完成了。現在給定乙個初始狀態,要求輸出能夠完成遊戲所需翻轉的最小次數,如果初始狀態已經達到要求輸出0。如果...

列舉演算法思路訓練 poj1753

從知乎找到乙份訓練大綱,先按照這個練習吧 poj1753 大意是4 4的棋盤上,不斷黑白面的翻 己和上下左右 如果有棋子的話 如果有可能翻到只有一種顏色,那麼算出來最少翻幾個棋子就可以做到只有一種顏色 列舉的思想是不斷地猜測,從可能的集合中一一嘗試,然後再判斷題目的條件是否成立。oiwiki是這麼說...