廣度優先搜尋 水杯倒水問題

2021-07-23 08:50:08 字數 1189 閱讀 9553

三個水杯

時間限制:1000 ms | 記憶體限制:65535 kb

難度:4

描述 給出三個水杯,大小不一,並且只有最大的水杯的水是裝滿的,其餘兩個為空杯子。三個水杯之間相互倒水,並且水杯沒有標識,只能根據給出的水杯體積來計算。現在要求你寫出乙個程式,使其輸出使初始狀態到達目標狀態的最少次數。

輸入 第一行乙個整數n(0 < n < 50)表示n組測試資料

接下來每組測試資料有兩行,第一行給出三個整數v1 v2 v3 (v1 > v2> v3 v1<100 v3>0)表示三個水杯的體積。

第二行給出三個整數e1 e2 e3 (體積小於等於相應水杯體積)表示我們需要的最終狀態

輸出 每行輸出相應測試資料最少的倒水次數。如果達不到目標狀態輸出-1

樣例輸入

2 6 3 1

4 1 1

9 3 2

7 1 1

樣例輸出

3 -1

利用廣度優先搜尋,暴力破解。

用佇列實現廣搜。倒水問題實際上就是不斷嘗試用某乙個水杯,向另乙個水杯倒水,當然會提前檢查是否滿足倒水情況。

初始狀態就是給定的初始給定的水杯狀態,然後將其加入空佇列。倒水後不斷將新出現的水杯狀態從隊尾入隊,然後從隊頭讀取乙個狀態並將其彈出,再進行倒水,再將倒出的新的狀態加入到隊尾去。**如下。

#include

#include

#include

using namespace std;

#define empty 0

typedef struct node

cupnode;

int cupcapacity[3],cupendstate[3];

int isvisited[100][100][100];

int isachieve(cupnode current)

return1;}

int pourwater(int source,int destination,cupnode* cup) //從source倒進destination裡

else

}int bfs()}}

} }

return -1;

}int main()

return

0;}

3水杯倒水問題

問題 給出三個杯子的容量abc 其中剛開始時c杯是滿的,ab是空的。現在在保證不會有漏水的情況下進行如下操作 將乙個杯子x的水倒到另乙個杯子y中,如果x空了或者y滿了就停止 滿足其中乙個條件才停下 現問c中水量有多少種可能性 a,b,c為非負整數 解法1 數論,擴充套件歐幾里得 待補充解法2 模擬倒...

細胞問題(廣度優先搜尋)

description 一矩形陣列由數字0到9組成,數字1到9代表細胞,細胞的定義為沿細胞數字上下左右還是細胞數字則為同一細胞,求給定矩形陣列的細胞個數。如 陣列 0234500067 1034560500 2045600671 0000000089 有4個細胞。input 輸入共m 1行第一行有兩...

搜尋 廣度優先搜尋

廣度優先搜尋一層一層地進行遍歷,每層遍歷都是以上一層遍歷的結果作為起點,遍歷乙個距離能訪問到的所有節點。需要注意的是,遍歷過的節點不能再次被遍歷。class solution,int shortestpathbinarymatrix vectorint grid length return 1 cl...