三個油瓶分油問題

2021-07-06 01:11:01 字數 1943 閱讀 3714

原問題:兩個小孩去打油,乙個人帶了乙個一斤的空瓶,另乙個帶了乙個七兩乙個三兩的空瓶。原計畫各打一斤油,可是由於所帶的錢不夠,只好兩人合打了一斤油,可是又沒有其它工具,試僅用三個瓶子(一斤、七兩、三兩)精確地分成兩個半斤油來。

a.將分油問題構造的多叉樹存入佇列oilqueue

中,盡量將在陣列

arr中出現過的結點不要入隊。

b.將佇列頭結點出隊,若結點未在陣列arr

出現過,則存入陣列

arr中;若結點已在陣列arr

中出現過,則直接出隊。

c.構造多叉樹直到找到分油問題的結果結點。

d.按照結點的n屬性,尋找其父節點,即找出分油過程。

油瓶中的油的變化規則:

oil類具有(x,y,z)屬性,存放(一斤、七兩、三兩)瓶裡的油。

node類,具有

oil和

n屬性,存放三個瓶子裡的油狀態,以及瓶子存放油的父節點在陣列中的位置。

佇列oilqueue

存放分油問題的廣度優先搜尋樹中的節點。

陣列arr

存放分油問題的廣度優先搜尋樹中不重複的節點。

陣列result

存放分油問題的結果。

問題的起始狀態<10,0,0>,

問題的目標狀態

<5,5,0>

#include#includeusing namespace std;

class oil

oil(int a,int b,int c):x(a),y(b),z(c){}

~oil(){}

};class node

node(oil *s_o,int c):o(s_o),n(c){}

~node(){}

};bool iscir(node *node,int cnt,node arr[1000])

return false;

}int main()

oilqueue.pop();

//7兩瓶不滿時裝滿

if(oil->y<7)

//3兩瓶不滿時裝滿

if(oil->z<3)

//7兩瓶不空時倒空

if(oil->y>0)

//3兩瓶不空時倒空

if(oil->z>0)

//7兩瓶中的油全倒入3兩瓶

if(oil->y>0 && oil->y+oil->z<=3)

//3兩瓶中的油全倒入7兩瓶

if(oil->z>0 && oil->y+oil->z<=7)

//用3兩瓶中的油裝滿7兩瓶

if(oil->y<7 && oil->y+oil->z>=7)

//用7兩瓶中的油裝滿3兩

a.本實驗採用的是盲目搜尋演算法中的廣度優先搜尋,因為是盲目搜尋,使得實驗的空間複雜度較大,但是採用重複的節點不再儲存,使得在一定程度上降低了實驗的空間複雜度。

b.因為實驗只有起始狀態以及終止狀態,使得實驗過程中在儲存節點的時候都必須檢測是否達到終止狀態。對於佇列中每個節點的儲存也需要列出所有規則進行條件判斷。

c.這個實驗只是針對油瓶是(一斤、七兩、三兩)的問題進行解決,靈活度並不高,假設油瓶容量為其它情況,需要重新再次編寫**。

三個水杯問題

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

Color的三個問題

文 王煜全 什麼是color?新一代網路入口?從網際網路到移動網際網路,交流更為高效 內容愈加豐富 應用日益繁榮,這是本質的趨向。然而,使用者如何進入 access 網路,獲得並使用各種應用,這將成為關鍵問題。也就是說,網路應用入口會是在什麼地方?最初,yahoo式的瀏覽導航是入口 後來,以goog...

哲學三個終極問題

唯物三個終極問題 1.如何更好的認識宇宙世界 並解決關於宇宙的問題。2.如何更好的認識人類社會 並解決關於人類的問題。3.如何更好的認識自我人生 並解決關於人生的問題。唯心三個終極問題 1我是誰?2我從 來?3我要到 去 後三者也可以說是人生的三個終極問題,也有其他類似的問題,看看這個寓言中的三個問...