/*問:有三個容器,容量是x、y、z,若要得到t體積的水,倒來倒去最少需要操作幾步?*/
/*測試用例:輸入3 5 8 4,輸出6*/
#include
#include
#include
#include
using namespace std;
//乙個儲存三個容器當前狀態的結構體,同時記錄步數
struct volumestate
;int step;
volumestate()
; step =0;
}};// 由第i個容器向第j個容器倒水,需要將第j個容器裝滿才可
void
pour
(int i,
int j, volumestate &s,
const array<
int,
4>
&volume)
//第i個容器全部倒出
else
}int
bfs(volumestate start,
int t,
const array<
int,
4>
&volume, vector>
>
&visited)}}
}return int_max;
}int
main()
;//需要有個表記錄已經遍歷過的情況,防止bfs死迴圈
vector>
>
visited
(x +
1, vector>
(y +
1, vector
(z +1,
0)))
;if(t == x || t == y || t == z)
int minstep = int_max;
//遍歷所有可能的初始情況
for(
int i =
1; i <=3;
++i)}}
if(minstep == int_max)
cout <<-1
<< endl;
else
cout << minstep << endl;
return0;
}
三個容器倒水 三個水桶等分8公升水的問題 演算法的樂趣
有三個容積分別為3公升 5公升 8公升的水桶,其中容積為8公升的水桶中裝滿了水,容積為3公升和容積為5公升的水桶都是空的。三個水桶都沒有刻度,現在需要將大水桶中的8公升水等分成兩份,每份都是4公升水,附加條件是只能這三個水桶,不能借助其他輔助容器。恩,是的,這是乙個很經典的問題。然而,我們並不能想全...
Color的三個問題
文 王煜全 什麼是color?新一代網路入口?從網際網路到移動網際網路,交流更為高效 內容愈加豐富 應用日益繁榮,這是本質的趨向。然而,使用者如何進入 access 網路,獲得並使用各種應用,這將成為關鍵問題。也就是說,網路應用入口會是在什麼地方?最初,yahoo式的瀏覽導航是入口 後來,以goog...
三個水杯問題
給出三個水杯,大小不一,並且只有最大的水杯的水是裝滿的,其餘兩個為空杯子。三個水杯之間相互倒水,並且水杯沒有標識,只能根據給出的水杯體積來計算。現在要求你寫出乙個程式,使其輸出使初始狀態到達目標狀態的最少次數。輸入 第一行乙個整數n 0v2 v3 v1 100 v3 0 表示三個水杯的體積。第二行給...