1. 程式人生 > >深度搜索

深度搜索

深度搜索DFS

深搜的奧義在於-------不撞南牆不回頭

“可能我撞了南牆才會回頭吧,可能我見了黃河才會死心吧。。。”

來自於8102年很火的一首歌

深度優先搜尋,顧名思義,就是在搜尋時要深入到不能再深入為止

什麼意思呢,我們拿一棵樹來舉例吧。
在這裡插入圖片描述

這是一個樹形的資料結構,在A處,有三個選擇,選擇一個之後判斷還能不能繼續深入,即判斷是否到了葉子結點。假設選擇了B,還能深入,那麼繼續往下走,假設這次選擇了E。此時到了葉子節點,沒法繼續深入,那麼就要往回走。退回到了B之後,發現還有另外一條路可以走,直到下一次撞到了“南牆”才會回頭,這就是深搜。

就像走迷宮一樣,當然迷宮問題就是一類典型的深搜。
網上找的圖


我們走迷宮的時候,除去我們來時的方向,總共有三個方向可以走,判斷一下我們要去的方向是不是牆,一直這麼走下去,直到三個方向都不能走的時候,就是我們所說的死衚衕,這時,我們需要退回去(這其實就是回溯,深搜和回溯在一些問題上,其實是沒什麼差別的),退到我們上一個路口,看看還有沒有路可以走,如果有就走,如果沒有,就再退回到上上個路口,以此類推,如果此迷宮有一條路徑,我們一定會找到,因為這樣的走法我們列舉的此迷宮的所有路徑。

下面是深度搜索的一些題目,可以幫助你更好的理解dfs