dfs簡單總結

2021-07-02 18:52:10 字數 741 閱讀 1540

介紹:dfs中文名「先深搜尋」,說得通俗點就是一搜到底,「不撞南牆不回頭」

如上圖,dfs搜尋次序為1->2->3到頭之後,回到2,然後到4,此時有兩個方向可走,乙個是3,乙個是5,因為3已搜過,那麼只有搜5了,此時所有節點全部遍歷完。

dfs一般用遞迴來實現,

格式如下:

dfs(px)

結束條件;

for(pn)

應用:1、因為dfs一搜到底的特性,當我們需要對乙個有一些步驟(每一步可能會有多種做法)的事件作處理時,我們可以在假設步驟做法的情況下,得到乙個事件,再判斷事件是否滿足條件,若滿足,那麼就得到了一組步驟做法的解,所有情況都遍歷的情況下,就得到了所有解。(如,在找節點1到節點n之間的通路個數時就可以用這個特性)

2、因為dfs在「撞牆」之後會回頭,也就是會回溯,當回溯時也就可以把「撞牆」時獲得的一些資訊返回過來。(如,在兩人博弈問題,暴力搜尋時,用的就是這個特性)

優化:dfs可以說是一種相當暴力的方法,所以說,時間複雜度在一般情況下不會低,所以就必須學會優化。剪枝是一種優化的方法,它是把那種絕對不滿足條件的可能性去掉(不去遍歷它),如最開始那幅圖,若規定通路中不能有節點3,那麼碰到節點3,就跳過,不去dfs,或者把節點3當做「牆」,碰到節點3就相當於「撞牆」了。步驟限制法,當你知道你要找的解的步驟數一定小於某個值時,那麼步驟數一旦達到那個值就「撞牆了」,只能回溯了。

2016 12 10 dfs簡單總結

最近做了很多關於搜尋的題目,今天也是做乙個小總結。先附上幾道基本題的 馬蘭過河卒 在乙個大棋盤上,乙個過河卒在 0,0 的位置上,還有乙隻馬,馬的位置固定的,可以向8個位置走,這些馬可以走的地方都算馬的攻擊範圍內。小卒子不能走到馬的攻擊範圍。不是卒子一步,馬一步,只有當卒子走進馬一步就可以到的地方馬...

dfs簡單題目

1 桐桐的全排列 可在 中國石油acm網 提交 description 今天,桐桐的老師布置了一道數學作業,要求列出所有從數字1到數字n的連續自然數的排列,要求所產生的任一數字 序列中不允許出現重複的數字。因為排列數很多,桐桐害怕寫漏了,所以她決定用計算機程式設計來解決。input 只有乙個整數n ...

組合 DFS 簡單

description 問題很簡單,給你n個正整數,求出這n個正整數中所有任選k個相乘後的和。input 輸入有兩行,第一行是兩個整數n和k,其中1 k n 10。接下去一行就是n個正整數,保證最後結果用long即可儲存。output 輸出只有乙個正整數,為最後的和。sample input 4 2...