韓信走馬分油,A 啟發式搜尋

2021-09-21 17:48:58 字數 1132 閱讀 3613

題目內容:

泊松是法國數學家、物理學家和力學家。他一生致力科學事業,成果頗多。有許多著名的公式定理以他的名字命名,比如概率論

中著名的泊松分布。 有一次閒暇時,他提出過乙個有趣的問題,後稱為:「泊松分酒」。在我國古代也提出過類似問題,遺憾

的是沒有進行徹底探索,其中流傳較多是:「韓信走馬分油」問題。 有3個容器,容量分別為12公升,8公升,5公升。其中12公升中裝

滿油,另外兩個空著。要求你只用3個容器操作,最後使得某個容器中正好有6公升油。 下面的列表是可能的操作狀態記錄:12,0,0

4,8,0

4,3,5

9,3,0

9,0,3

1,8,3

1,6,5

每行3個資料,分別表示12,8,6公升容器中的油量

第一行表示初始狀態,第二行表示把12公升倒入8公升容器後的狀態,第三行是8公升倒入5公升,…

當然,同乙個題目可能有多種不同的正確操作步驟。 本題目的要求是,請你編寫程式,由使用者輸入:各個容器的容量,開始的

狀態,和要求的目標油量,程式則通過計算輸出是否可能分成功-「y」,「n」。

例如,使用者輸入:

12,8,5,12,0,0,6

使用者輸入的前三個數是容器容量(由大到小),接下來三個數是三個容器開始時的油量配置,最後乙個數是要求得到的油量(放在

哪個容器裡得到都可以) 則程式可以輸出「y」

輸入描述

各個容器的容量,開始的狀態,和要求的目標油量

輸出描述

是否可能分成功-「y」,「n」

輸入樣例

12,8,5,12,0,0,6

輸出樣例

y靈機一現想到了前兩天學的a*啟發式搜尋,感覺解決這種問題非常完美, 只過了校oj也不知道水不水之後到原**上試試

#include#include#include#includeusing namespace std;

int r[3], n;

int a[3], p;

bool dfs(int v, int s, int pre)

} return false;

}int main()

while (++p) }

cout << "n" << endl;

}

韓信走馬分油

首先定義一套規則 題目中的瓶子總共有三種,最大的a,中等的b,最小的c,我們規定 最大的瓶子只能往中等的瓶子倒 若中等的瓶子為空 中等的瓶子只能往最小的瓶子倒 若最小的瓶子不滿 最小的瓶子只能往最大的瓶子倒 若最小的瓶子已滿 145.韓信走馬分油 15分 c時間限制 3000 毫秒 c記憶體限制 3...

啟發式搜尋

啟發式搜尋 heuristically search 又稱為有資訊搜尋 informed search 它是利用問題擁有的啟發資訊來引導搜尋,達到減少搜尋範圍 降低問題複雜度的目的,這種利用啟發資訊的搜尋過程稱為啟發式搜尋。例題 八數碼問題 運用優先佇列,根據目前已經確定的位置算出目前的價值,並匯入...

啟發式搜尋

啟發式搜尋 啟發式搜尋就是在狀態空間中的搜尋對每乙個搜尋的位置進行評估,得到最好的位置,再從這個位置進行搜尋直到目標。這樣可以省略大量無謂的搜尋路徑,提高了效率。在啟發式搜尋中,對位置的估價是十分重要的。採用了不同的估價可以有不同的效果。在啟發式搜尋中,我們每次找到當前 最有希望是最短路徑 的狀態進...