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是這麼說...