這道題是個廣度搜尋,借用佇列實現的。對搜尋還是處於入門的階段,所以也是看了別人的分析才能寫出來**,所以貼出來與大家共勉~
參考文章:
首先,是畫了一張圖如下所示:
步驟分析:(比如從第一列測試資料出發:6,3,1和4,1,1)
第
一、讓6,0,0先進來,然後對其進行倒水開始。此時只有第乙個被子有水(!=0不等於0),讓這個狀態進佇列。
第
二、然後讓第二層的進佇列判斷。
第
三、依次往後,直到全部遍歷完成或者是遇到第一次達到4,1,1為止。
#include #include #include using namespace std;
#define m 100
bool visit[m][m][m];
int v1,v2,v3,e1,e2,e3;
struct cup
start_v,end_v;
bool achieve(cup current)
} return true;
}bool del(cup &now,int start,int end) //start杯子向end杯子倒水
} return false;
}int bfs()
for(i=0;i<3;i++)
}}
} return -1;
}int main()
{ int n;
cin>>n;
while(n--)
{ cin>>v1>>v2>>v3;
cin>>e1>>e2>>e3;
start_v.volume[0]=v1;start_v.volume[1]=v2;start_v.volume[2]=v3;
end_v.volume[0]=e1;end_v.volume[1]=e2;end_v.volume[2]=e3;
cout<
NYOJ 三個水杯
時間限制 1000 ms 記憶體限制 65535 kb 難度 4 描述給出三個水杯,大小不一,並且只有最大的水杯的水是裝滿的,其餘兩個為空杯子。三個水杯之間相互倒水,並且水杯沒有標識,只能根據給出的水杯體積來計算。現在要求你寫出乙個程式,使其輸出使初始狀態到達目標狀態的最少次數。輸入第一行乙個整數n...
NYOJ 三個水杯
題目 這道題做了三天,內心是痛苦的。幾次想到放棄,但是又不忍心現有的成果,又不想借鑑別人的 我相信我可以。就堅持下來了。最後也通過了。做這道題的感想就是流淚並快樂著。或許這也就是acmer的樂趣吧。這道題收穫是巨大的。過後看網上說就是佇列 搜尋。我感覺則不然。我認為他是搜尋 半個動態規劃。為什麼這麼...
三個水杯 搜尋
時間限制 1 sec 記憶體限制 64 mb 提交 狀態 討論版 給出三個水杯,大小不一,並且只有最大的水杯的水是裝滿的,其餘兩個為空杯子。三個水杯之間相互倒水,並且水杯沒有標識,只能根據給出的水杯體積來計算。現在要求你寫出乙個程式,使其輸出使初始狀態到達目標狀態的最少次數。第一行乙個整數n 0 接...