鄰接表的深度搜尋 DFS 和廣度搜尋 BFS

2021-10-09 12:14:47 字數 1478 閱讀 6539

圖是一種比樹更複雜的資料結構,常見的遍歷方式無非兩種:

深度搜尋:優先深度掃瞄,如果當前路徑走到了死胡同,那麼,又依次訪問上次訪問過的節點的可走路徑。就這樣如此往復,最終完成圖的遍歷。

深度搜尋類似於樹的前序遍歷

廣度搜尋:優先廣度掃瞄,假設你前面現在有n條路可走,ab…n,那麼先把ab…n的所有節點訪問一遍。每次訪問之後都把當前所走路徑的下一條路徑(若存在)則存入佇列,這樣,當前路徑走完之後,又重複上述步驟,直至遍歷完所有節點。

廣度搜尋類似於樹的層次遍歷

以下為鄰接表的兩種遍歷方式的實現:

執行如下圖:

/*邊結構*/

typedef

struct arcnodearcnode;

/*頂點表結構*/

typedef

struct vnodevnode;

/* 圖 */

typedef

struct agraphagraph;

/* 建立圖 */

void

creategraph

(agraph &graph)

;void

dfs(agraph g,

int v)

;void

bfs(agraph g,

int v)

;void

cleararray

(int

*array,

int size)

;// 輔助陣列

static

int*visit;

intmain

(int argc,

char

** ar**)

void

creategraph

(agraph &graph)

cout<<

"輸入邊資訊:"

;for

(int k=

0; k

// 深度優先遍歷演算法

void

dfs(agraph g,

int v)

// 走投無路的時候,才去訪問自己節點的邊

p = p->nextarc;}}

void

bfs(agraph g,

int v)

//該節點的下一條邊

p = p->nextarc;}}

}void

cleararray

(int

*array,

int size)

}

深度搜尋 DFS 和廣度搜尋 BFS

一 搜尋方法 深度搜尋常用於解決圖的遍歷問題 尤其是矩陣圖如迷宮問題等 比如求解從某乙個點到另乙個點的最短距離,則只需遍歷所有路徑,在遍歷同時記錄路徑長度,最後一定能找到最短的距離,但這種方法複雜度較高,因為要遍歷完所有結點才能找到。深度搜尋是回溯法的主要方法,沿著一條路一直走,走不通再回溯到上一節...

DFS(深度搜尋)和BFS(廣度搜尋)

廣度優先搜尋 bfs 利用對列的特性,讓下一節點全部執行完後,再跳到的下一節點。bfs需要用到佇列,具體的可以由題目的情況而定 一般用來解決,給定位置需要你找出到達位置的最短距離 在對列的使用中,佇列提供了乙個位置使得在幾個方向的前進得以同時進行,也就是說我麼在檢索的時候,由於我們同時開花,因此在到...

深度優先搜尋(DFS)和廣度優先搜尋(BFS)

先說dfs 關於dfs和bfs的搜尋題目,首先要將其轉化為樹,如迷宮,也可轉化為樹來搜尋 dfs是一條鏈一條鏈的搜尋,而bfs是逐層進行搜尋,這是他倆乙個很大的區別 給定整數a1 a2 a3 an,判斷是否可以從中選出若干個數,使得他們的和恰好為k。限制條件 樣例 4 n 1 2 4 7 a陣列 1...