演算法筆記之DFS與 BFS

2021-07-11 01:40:03 字數 679 閱讀 8554

基本思想:

深度優先搜尋(dfs,depth-first search): 

它從某個狀態開始,不斷的轉移狀態直到無法轉移狀態,然後回退到前一步的狀態,繼續轉移到其它狀態,如此不繼重複,直至找到最終的解。

寬度優先搜尋(bfs,breadth-first search):

總是先搜尋距離初始狀態近的狀態,也就是說,它是按照開始狀態--->只需1次轉移就可以到達的所有狀態---->只需2次轉移就可以到達的所有狀態---->.....這樣的順序進行搜尋,複雜度為 o(狀態數x轉移的方式)。 ----一般使用佇列

實現方式:

1, dfs,一般使用棧的方式來實現,直接使用遞迴函式是最方便直接的;

2, bfs, 則使用佇列的fifo原則來實現bfs;

使用方式的比較:

1, 大多情況下使用深度優先搜尋實現好,遞迴函式可以簡短地編寫,而且狀態的管理也更簡單,

2, 在求取最短路時深度優先搜尋需要反覆經過同樣的狀態,所以此時還是使用寬度優先搜尋為好。也就是在求某經過路徑時使用dfs, 在求最短路徑時,則使用bfs.

使用記憶體的比較:寬度優先搜尋會把狀態逐個狀態放入佇列,因此通常需要與狀態數成正比的記憶體空間。寬度優先搜尋會把狀態逐個狀態放入佇列,因此通常需要與狀態數成正比的記憶體空間。

BFS與DFS演算法

dfs總結 首先,我們先了解一下bfs,bfs又稱廣度優先搜尋,一般都是用於解決一些圖,樹的遍歷問題。其實廣度優先搜尋就類似與二叉樹的層序遍歷過程,需要借助c 中stl裡面的queue佇列容器來實現這個過程。它其實就是一種分層查詢的過程,每次向前走一步,都會去訪問一批可以訪問的節點,不會存在dfs裡...

演算法 DFS與BFS

一 dfs 深度優先搜尋 dfs 深度優先遍歷dfs與樹的先序遍歷比較類似。假設初始狀態是圖中所有頂點均未被訪問,則從某個頂點v出發,首先訪問該頂點然後依次訪問它的所有鄰接結點,每次訪問乙個鄰接結點時,以該鄰接結點為根結點繼續進行dfs,直到結點的所有鄰接結點以及其鄰接結點的鄰接結點都被訪問完,才訪...

演算法(九) DFS與BFS演算法

優秀的模板 很棒的總結 具體講解可以參考 啊哈!演算法 題2045 題目描述 在乙個55的地圖上,存在著障礙物和平地。在這個地圖中,小x想要找到回家的路。地圖上,你可以每次上下左右行走一步。他希望他回家所走的是最短路,請問,他所走的路徑中,最短路的方案數。輸入共5行,每行是乙個字串。表示空地,表示障...