倒水問題 Fill,UVa 10603

2021-08-03 15:48:40 字數 814 閱讀 3597

路徑搜尋問題,用bfs可以解決

這裡用來乙個二維陣列visit進行判重。

因為如果搜尋到了相同的狀態那麼第乙個水杯中的水量x1和第二個水杯中的水量x2將會相同,所以可以通過visit[x1][x2] = 1判斷這個狀態事先被訪問過,無需插入佇列中

注意這裡是要找倒水量最少的解,不是總的步數最少,所以要用優先佇列,到水量少的先出隊,所以需要操作符過載了

#include#include #include using namespace std;

const int maxn = 200+5;

struct state

};int visit[maxn][maxn];

int liter[4],d,d1;//d1記錄當前最接近d且小於d的值

state goal;//記錄找到的狀態

int from = ;

int to = ;

state pour(state s, int f, int t)

else

return s;

}void bfs()

for(int i = 1; i<= 3; i++)

}for(int i = 0; i < 6; i++)

} }}

int main()

{ int t;

cin>>t;

while(t--)

{ //初始化

memset(visit,0,sizeof(visit));

cin>>liter[1]>>liter[2]>>liter[3]>>d;

bfs();

cout<

CODEVS 倒水問題

題目描述 有兩個無刻度標誌的水壺,分別可裝 x 公升和 y 公升 x,y 為整數且均不大於 100 的水。設另有一水 缸,可用來向水壺灌水或接從水壺中倒出的水,兩水壺間,水也可以相互傾倒。已知 x 公升壺為空 壺,y 公升壺為空壺。問如何通過倒水或灌水操作,用最少步數能在x或y公升的壺中量出 z z...

題解 倒水問題

實現 題目背景 輸入輸出已更改,請不要直接提交原先的 題目描述 假定兩個水壺a和b,供水量不限。可以使用三種方法裝水 給乙個水壺裝水 把乙個水壺倒空 從乙個水壺倒進另乙個水壺。當從乙個水壺倒進另乙個水壺時,如果第乙個水壺倒空,或者第二個水壺裝滿就不能再倒了。例如,乙個水壺a是5加侖和另乙個水壺b是6...

B Pour Water倒水問題

倒水問題 fill a 表示倒滿a杯,empty a 表示倒空a杯,pour a b 表示把a的水倒到b杯並且把b杯倒滿或a倒空。輸入包含多組資料。每組資料輸入 a,b,c 資料範圍 0 a b c b 1000 a和b互質。output你的程式的輸出將由一系列的指令組成。這些輸出行將導致任何乙個罐...