**結果
3個桶,分別為8l,5l,3l。初始狀態8l的桶裡滿水,另外2個桶空。過程中只能將乙個桶向另乙個桶,倒滿或者倒空水,求所有將8l水均分為4l+4l的方案,並展示倒水過程。
#include
using
namespace std;
// 8l, 5l, 3l水桶,將8l公升水均分為4,4,求所有方案
//定義unordered_map的雜湊函式
auto myhash =
(const vector<
int>
& v)
;unordered_map
int>
, vector
int>>
,decltype
(myhash)
>
ump(
0, myhash)
;//記錄每一種狀態的所有前驅狀態
int cnt =0;
//方案數,據說16種^.^
// 利用bfs搜尋所有狀態
void
bfs())
; ump=
;//8,0,0 要先寫成key,不然會重複bfs8,0,0一次
vector<
int> cur, empty, nxt;
int dir[6]
[2]=
,,,,
,};//6種倒水方向
while
(q.size()
)))continue
; vector<
int> empty =
;for
(int i =
0; i <6;
++i)
;//nxt沒有作為key,加入ump,且繼續bfs
q.push
(nxt);}
}}}// dfs找每個方案的倒水過程
演算法 3個水桶8公升水
問題描述 有3個水桶的容量為8公升,5公升和3公升。8公升水桶裡面裝滿了水。如果利用另外兩個桶,得到4公升水?思路 水桶裡的水量看作是狀態。倒水的動作,使得狀態變遷。遍歷所有的倒水動作,得到所有的狀態。因此問題就變成,如何從初始狀態 8,0,0 經過倒水動作的觸發,得到最終狀態 4,4,0 利用對所...
三個桶等分八公升水
狀態樹的遍歷 有這樣一道智力題目 有三個容積分別是3公升 5公升和8公升的水桶,其中容積為8公升的水桶中裝滿了水,容積為3公升和容積為5公升的水桶是空的。3個水桶都沒有體積刻度,現在需要將大水桶中的8公升水等分成兩份,每份都是4公升水,附加條件是只能使用另外兩個空水桶,不能借助其他輔助容器。這是乙個...
三個水桶等分8公升水的問題
有三個容積分別為8公升 5公升 3公升的水桶,其中容積為8公升的水桶盛滿了水,容積為5公升和3公升的水桶都是空的。三個水桶都沒有刻度,現在需要將水桶中的8公升水等分成2份,每份都是4公升水。條件是只能使用這三個水桶,不能借助其他工具。對於這個問題,似乎沒有 規律 可循,沒有專門的演算法來求解,因此只...