演算法 DFS與BFS

2021-10-10 10:18:20 字數 1276 閱讀 8554

一、dfs(深度優先搜尋)

dfs:深度優先遍歷dfs與樹的先序遍歷比較類似。假設初始狀態是圖中所有頂點均未被訪問,則從某個頂點v出發,首先訪問該頂點然後依次訪問它的所有鄰接結點,每次訪問乙個鄰接結點時,以該鄰接結點為根結點繼續進行dfs,直到結點的所有鄰接結點以及其鄰接結點的鄰接結點都被訪問完,才訪問下乙個鄰接結點並進行同樣操作,直至圖中所有和v有路徑相通的頂點都被訪問到。若此時尚有其他頂點未被訪問到,則另選乙個未被訪問的頂點作起始點,重複上述過程,直至圖中所有頂點都被訪問到為止。

二、bfs(廣度優先搜尋)
bfs:從圖中某頂點v出發,在訪問了v之後依次訪問v的各個未曾訪問過的鄰接點,然後分別從這些鄰接點出發依次訪問它們的鄰接點,並使得「先被訪問的頂點的鄰接點先於後被訪問的頂點的鄰接點被訪問,直至圖中所有已被訪問的頂點的鄰接點都被訪問到。 如果此時圖中尚有頂點未被訪問,則需要另選乙個未曾被訪問過的頂點作為新的起始點,重複上述過程,直至圖中所有頂點都被訪問到為止。

三、實現
實現以樹為例:樹是只有乙個根節點,且沒有迴路的圖

對圖進行訪問時要注意進行迴路檢測

function

treenode

(_val=undefined, _left=

null

, _right=

null

)// 0

// / \

// 1 2

// / \ / \

// 3 4 5 6

let root =

newtreenode(0

);root.left =

newtreenode(1

,new

treenode(3

),newtreenode(4

));root.right =

newtreenode(2

,new

treenode(5

),newtreenode(6

));// dfs

function

dfs1

(_root)

}function

dfs2

(_root)

}// bfs

function

bfs1

(_root)

}

BFS與DFS演算法

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

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

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

演算法筆記之DFS與 BFS

基本思想 深度優先搜尋 dfs,depth first search 它從某個狀態開始,不斷的轉移狀態直到無法轉移狀態,然後回退到前一步的狀態,繼續轉移到其它狀態,如此不繼重複,直至找到最終的解。寬度優先搜尋 bfs,breadth first search 總是先搜尋距離初始狀態近的狀態,也就是說...