3個桶均分8公升水 c

2021-10-09 17:28:13 字數 1473 閱讀 4176

**結果

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公升水。條件是只能使用這三個水桶,不能借助其他工具。對於這個問題,似乎沒有 規律 可循,沒有專門的演算法來求解,因此只...