第一次理解深度優先搜尋的李白打酒問題

2021-10-08 00:28:05 字數 969 閱讀 4892

對於深度優先搜尋演算法,其過程簡要來說是對每乙個可能的分支路徑深入到不能再深入為止,而且每個節點只能訪問一次

我最初接觸它是李白打酒問題,這個問題是這樣的

話說大詩人李白,一生好飲。幸好他從不開車。

一天,他提著酒壺,從家裡出來,酒壺中有酒2鬥。他邊走邊唱:

無事街上走,提壺去打酒。

逢店加一倍,遇花喝一斗。

這一路上,他一共遇到店5次,遇到花10次,已知最後一次遇到的是花,他正好把酒喝光了。

請你計算李白遇到店和花的次序,可以把遇店記為a,遇花記為b。則:babaabbabbabbbb 就是合理的次序。像這樣的答案一共有多少呢?請你計算出所有可能方案的個數(包含題目給出的)。

這個題是典型的深度優先演算法的題,為什麼這麼說呢,我們去思考這個問題的時候可以發現,每一種情況都是在上一種情況下延伸出來的,也就是說這些情況是在不斷遞迴,層層遞進的,而dfs就是基於遞迴實現的,這樣的話我們就可以把這些情況用一棵樹來表示,只要去遍歷這棵樹就能找到答案

回到題目上,李白最後一次會遇到花,然後恰好把酒喝光,這樣遞迴的結束條件就知道了,當遇到店5次,遇到花9次的時候,酒還剩一斗。

遞迴的最初條件是李白有兩斗酒,遇到店和花的次數都是0

遞迴的過程大概就是這樣的一棵樹,對於每一次,李白都會有兩種情況,遇到店或者遇到花。這樣不停的遞迴下去,直到到達我們設定的遞迴終點,這時我們就找到了答案

看看**再理解一下

int ans;

void

dfs(

int a,

int b,

int c)

if(b <=5)

if(a >

0&& c <=9)

}int

main()

第一次使用優先佇列

時間限制 1 sec 記憶體限制 128 mb 提交 8 解決 4 提交 狀態 討論版 已知進入優先佇列的各結點的優先順序 為 20的正整數,該值越小,則表示優先順序越高 以及各結點入佇列和出佇列的操作序列,要求輸出各結點的出佇列順序 輸出編號 注意,結點的編號為入佇列時的序號,且從1開始計起。輸入...

第一次作業 深度學習基礎

丁澤中 通過緒論的介紹我大概了解到了機器學習發展前景以及目前的應用領域等相關知識。在對於神經網路基礎的學習過程之中我對啟用函式 感知器和神經網路相關基礎知識有了一定的了解和總結 詳細見關於神經網路基礎的學習筆記 目前存在的問題就是需要再複習複習高等數學相關知識 有些公式推導存在疑惑。然後,早日徹底理...

第一次作業 深度學習基礎

學習完這次的課程,弄清楚了人工智慧,機器學習,神經網路,深度神經網路,深度學習等概念的區別和聯絡,學習了人工智慧的發展歷史。了解了神經網路類似生物學上的神經,存在啟用函式,神經的興奮和抑制,了解了深度學習開發的框架,如tensorflow,pytorch等等。同時,我意識到人工智慧的基礎就是數學,高...