圖是一種比樹更複雜的資料結構,常見的遍歷方式無非兩種:深度搜尋:優先深度掃瞄,如果當前路徑走到了死胡同,那麼,又依次訪問上次訪問過的節點的可走路徑。就這樣如此往復,最終完成圖的遍歷。
深度搜尋類似於樹的前序遍歷
廣度搜尋:優先廣度掃瞄,假設你前面現在有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...