深度優(yōu)先算法和廣度優(yōu)先算法介紹如下:
一、深度優(yōu)先搜索
深度優(yōu)先搜索屬于圖算法的一種,是一個(gè)針對(duì)圖和樹(shù)的遍歷算法,英文縮寫為DFS即Depth First Search。深度優(yōu)先搜索是圖論中的經(jīng)典算法,利用深度優(yōu)先搜索算法可以產(chǎn)生目標(biāo)圖的相應(yīng)拓?fù)渑判虮恚猛負(fù)渑判虮砜梢苑奖愕亟鉀Q很多相關(guān)的圖論問(wèn)題,如最短路徑問(wèn)題等等。
一般用堆數(shù)據(jù)結(jié)構(gòu)來(lái)輔助實(shí)現(xiàn)DFS算法。其過(guò)程簡(jiǎn)要來(lái)說(shuō)是對(duì)每一個(gè)可能的分支路徑深入到不能再深入為止,而且每個(gè)節(jié)點(diǎn)只能訪問(wèn)一次。
二、廣度優(yōu)先搜索
廣度優(yōu)先搜索(也稱寬度優(yōu)先搜索,縮寫B(tài)FS,以下采用廣度來(lái)描述)是連通圖的一種遍歷算法這一算法也是很多重要的圖的算法的原型。Dijkstra單源最短路徑算法和Prim最小生成樹(shù)算法都采用了和寬度優(yōu)先搜索類似的思想。其別名又叫BFS,屬于一種盲目搜尋法,目的是系統(tǒng)地展開(kāi)并檢查圖中的所有節(jié)點(diǎn),以找尋結(jié)果。
換句話說(shuō),它并不考慮結(jié)果的可能位置,徹底地搜索整張圖,直到找到結(jié)果為止?;具^(guò)程,BFS是從根節(jié)點(diǎn)開(kāi)始,沿著樹(shù)的寬度遍歷樹(shù)的節(jié)點(diǎn)。如果所有節(jié)點(diǎn)均被訪問(wèn),則算法中止。一般用隊(duì)列數(shù)據(jù)結(jié)構(gòu)來(lái)輔助實(shí)現(xiàn)BFS算法。
深度優(yōu)先遍歷的思想:
首先訪問(wèn)圖中某指定的起始點(diǎn)Ⅵ,然后由Ⅵ出發(fā)訪問(wèn)它的任一個(gè)鄰接點(diǎn)vj,再?gòu)膙j出發(fā)訪問(wèn)vj任一個(gè)未被訪問(wèn)的鄰接點(diǎn)vk,接著從vk出發(fā)進(jìn)行類似的訪問(wèn),如此進(jìn)行下去,一直到某頂點(diǎn)已沒(méi)有未被訪問(wèn)過(guò)的鄰接點(diǎn),則退回一步,找前一個(gè)頂點(diǎn)的其他尚未被訪問(wèn)的鄰接點(diǎn)。
如果有尚未被訪問(wèn)的鄰接點(diǎn),則訪問(wèn)此頂點(diǎn)后,再?gòu)脑擁旤c(diǎn)出發(fā)進(jìn)行與前述類似的訪問(wèn);如果退回一步后,前一個(gè)頂點(diǎn)也沒(méi)有未被訪問(wèn)的鄰接點(diǎn),則再向前回退一步再進(jìn)行搜索,重復(fù)上述過(guò)程,直到所有頂點(diǎn)均被訪問(wèn)過(guò)為止。