藍橋杯 分紅酒

2022-04-29 18:48:09 字數 1283 閱讀 8129

分紅酒

有4個紅酒瓶子,它們的容量分別是:9公升, 7公升, 4公升, 2公升

開始的狀態是 [9,0,0,0],也就是說:第乙個瓶子滿著,其它的都空著。

允許把酒從乙個瓶子倒入另乙個瓶子,但只能把乙個瓶子倒滿或把乙個瓶子倒空,不能有中間狀態。這樣的一次倒酒動作稱為1次操作。

假設瓶子的容量和初始狀態不變,對於給定的目標狀態,至少需要多少次操作才能實現?

本題就是要求你程式設計實現最小操作次數的計算。

輸入:最終狀態(逗號分隔)

輸出:最小操作次數(如無法實現,則輸出-1)

例如:輸入:

9,0,0,0

應該輸出:

0輸入:

6,0,0,3

應該輸出:

-1輸入:

7,2,0,0

應該輸出:

2

1 #include 2 #include 3 #include 

4using

namespace

std;56

int full[4] = ;

7 typedef struct

8state;

1213

int vis[10][8][5][3

];14

int bfs(state &temp , int i , int j)//

把i倒入j中

1524

else

2529

if(vis[temp.num[0]][temp.num[1]][temp.num[2]][temp.num[3]]) return

0;//

如果之前出現過這種情況,就不再反覆倒了

30 vis[temp.num[0]][temp.num[1]][temp.num[2]][temp.num[3]] = 1

;31 temp.step++;

32return1;

33}34int

main()

3552

if(end.num[0] + end.num[1] + end.num[2] + end.num[3] != 9)//

一共分的是9公升酒,輸入不合法

5357

while(!q.empty())

5867

inti , j;

68for(i = 0; i < 4; i++)//

把i倒入j中

6977}78

}79}80

}81return0;

82 }

分紅酒 藍橋杯 已更新

這是2013年藍橋杯全國軟體大賽模擬題的第4題,問題是分紅酒,方法是bfs。這是乙個關於廣度優先搜尋 bfs 的題目。每個杯中水的量只能為整數,所以狀態是有限的,遍歷這些狀態,並找出距離初始狀態最短的路徑,即為所求解。廣度優先搜尋 bfs 使用佇列實現,正如深度優先搜尋 dfs 使用堆疊實現。解題思...

藍橋杯入門訓練 藍橋杯備賽

begin 1 a b問題str1 input str2 str1.split s int str2 0 int str2 1 print s begin 2 序列求和s int input 用公式計算而不用迴圈,避免超時 n s s 1 2print int n begin 3 圓的面積impor...

藍橋杯 暗戀

問題描述 同在乙個高中,他卻不敢去找她,雖然在別人看來,那是再簡單不過的事。暗戀,是他唯一能做的事。他只能在每天課間操的時候,望望她的位置,看看她傾心的動作,就夠了。操場上的彩磚啊,你們的位置,就是他們能夠站立的地方,他倆的關係就像磚與磚之間一樣固定,無法動搖。還記得當初鋪磚的工人,將整個操場按正方...