uva 10603 Fill(倒水問題 BFS)

2021-07-04 05:15:13 字數 761 閱讀 7248

貌似uva崩了,現在進不去,所以這道題還判斷正確與否,其實無所謂了,我這是看的網上的**,寫的基本上一樣,唉,沒辦法,不會做,又看了網上的題解,認真寫理解吧還是。。。

構造了乙個結構體,water陣列用來儲存三個杯子的狀態,sum用來儲存當前的倒水量,visit陣列用來儲存狀態,以

防他們重複訪問,三個杯子只需要兩個杯子來判斷,第三個已經確定,所以開乙個二維陣列就可以了。。。然後用

reach陣列來儲存所有的倒水量,下標是目標水量,值是一共的倒水量。。。

只需要一次bfs最多有200*200種狀態,然後從這些狀態中找到想要求的目標水量對應的到水量就可以了。。。

二維陣列來判斷是否重複是個好方法,只可惜我沒想出來,。。。。繼續加油!!!

另外還出了點bug,找了一上午。。。原來是優先順序問題,if語句裡面的,以後都老老實實加括號算了。。。

**:

#include#include#include#includeusing namespace std;

int visit[205][205];

int reach[205];

int a[3];

struct state

stt,st2;

void solve()

return ;

}void bfs()

}} }

return ;

}int main()

} }return 0;

}

uva好了,已經a了

UVa10603 Fill 優先佇列搜尋

include include include include using namespace std const int maxn 207 bool vis maxn maxn 實際上兩個杯子的狀態就可以確定整個三元組的狀態 int path maxn maxn 2 同於儲存路徑,儲存的是指向他的...

例題7 8 UVA 10603 Fill 倒水問題

2017.1.24 重新做了一遍這個題目。三個杯子,總水量是一樣的,只需要記錄前兩個杯子來作為狀態來判重即可。然後他要求總到水量最小,直接貪心就好了,優先選取總水量最小的,用優先佇列即可。然後找乙個最接近d的答案即可。include include include include using nam...

uva 10603 倒水問題

劉汝佳說這是一道最短路,可是我怎麼也想不出如何建圖,把問題轉換為最短路問題,我就想自己的辦法。感覺這個題可以用三維dp 每一維代表乙個瓶子 f maxn maxn maxn 狀態轉移我就想 每一次倒水一定要把乙個倒完或把另乙個裝滿才有意義,因為只有這樣三個瓶的水量才知道 所以可以根據這個進行狀態轉移...