1. 程式人生 > >資料結構基礎之圖的遍歷

資料結構基礎之圖的遍歷

從圖中的某一點出發訪問遍圖中其餘頂點,且使每一個頂點僅被訪問一次,這一過程就叫做圖的遍歷。
1, 深度優先遍歷
DFS,深度優先搜尋其實是一個遞迴的過程,如果我們進一步思考,對將要搜尋的圖擬定一個規則,如在沒有碰到重複頂點的情況下,始終是向右手邊走。將這圖展開就像是一棵樹,而對其的遍歷就是前序遍歷。它從圖中某個頂點v出發,訪問此頂點,然後從v未被訪問的鄰接點出發深度優先遍歷圖,直至圖中所有和v有路徑相通的頂點都被訪問到。若圖中還有頂點沒被訪問,則另選圖中一個未曾被訪問的頂點作起始點,重複上述過程,直至圖中所有頂點都被訪問為止。
2, 廣度優先遍歷
類似於樹的按層次遍歷過程,它從圖中某頂點v出發,在訪問了v之後依次訪問v的各個未曾訪問過的鄰接點,然後分別從這些鄰接點出發依次訪問它們的鄰接點,並使先被訪問的頂點的鄰接點先於後被訪問的頂點的鄰接點被訪問。直至圖中所有已被訪問的頂點的鄰接點都被訪問到,若圖中還有頂點沒被訪問,則另選圖中一個未曾被訪問的頂點作起始點,重複上述過程,直至圖中所有頂點都被訪問為止。
3, 總結
遍歷圖的過程實際是通過邊或弧找鄰接點的過程,因此廣度優先與深度優先遍歷圖的時間複雜度是相同的。兩者不同之處在於對頂點訪問的順序不同。

相關推薦

資料結構基礎(中):演算法

轉自:http://www.cnblogs.com/edisonchou/p/4676876.html   圖(中):圖的遍歷演算法 上一篇我們瞭解了圖的基本概念、術語以及儲存結構,還對鄰接表結構進行了模擬實現。本篇我們來了解一下圖的遍歷,和樹的遍歷類似,從圖的某一頂點出發訪問

資料結構基礎

從圖中的某一點出發訪問遍圖中其餘頂點,且使每一個頂點僅被訪問一次,這一過程就叫做圖的遍歷。 1, 深度優先遍歷 DFS,深度優先搜尋其實是一個遞迴的過程,如果我們進一步思考,對將要搜尋的圖擬定一個

資料結構基礎(下):最短路徑

轉自:http://www.cnblogs.com/edisonchou/p/4691020.html   圖(下):最短路徑 圖的最重要的應用之一就是在交通運輸和通訊網路中尋找最短路徑。例如在交通網路中經常會遇到這樣的問題:兩地之間是否有公路可通;在有多條公路可通的情況下,哪

資料結構基礎(中):最小生成樹演算法

轉自:http://www.cnblogs.com/edisonchou/p/4681602.html   圖(中):最小生成樹演算法 圖的“多對多”特性使得圖在結構設計和演算法實現上較為困難,這時就需要根據具體應用將圖轉換為不同的樹來簡化問題的求解。 一、生成樹與最小生成

資料結構基礎(上):的基本概念

轉自:http://www.cnblogs.com/edisonchou/p/4672188.html   圖(上):圖的基本概念 前面幾篇已經介紹了線性表和樹兩類資料結構,線性表中的元素是“一對一”的關係,樹中的元素是“一對多”的關係,本章所述的圖結構中的元素則是“多對多”的

資料結構基礎 的 鄰接矩陣實現與鄰接表實現

【鄰接矩陣】 鄰接矩陣,就是一個反應邊與邊之間聯絡的二維陣列。這個二維陣列我們用matrix[numV][numV]表示,其中numV是頂點數。 對於無權圖 若頂點Vi和Vj之間有邊,則matrix[Vi][Vj]=1;否則matrix[Vi][Vj]=0。 對

資料結構實驗論二:的深度(SDUT 2107)(簡單DFS)

題解:圖的深度遍歷就是順著一個最初的結點開始,把與它相鄰的結點都找到,也就是一直往下搜尋直到盡頭,然後在順次找其他的結點。 #include <bits/stdc++.h> using namespace std; int gra[200][200]; //儲存圖的大小 int

資料結構實驗論二:的深度__DFS

Problem Description 請定一個無向圖,頂點編號從0到n-1,用深度優先搜尋(DFS),遍歷並輸出。遍歷時,先遍歷節點編號小的。 Input 輸入第一行為整數n(0 < n < 100),表示資料的組數。 對於每組資料,第一行是兩個整數k,m(0 < k

資料結構實驗論一:基於鄰接矩陣的廣度優先搜尋__BFS

Problem Description 給定一個無向連通圖,頂點編號從0到n-1,用廣度優先搜尋(BFS)遍歷,輸出從某個頂點出發的遍歷序列。(同一個結點的同層鄰接點,節點編號小的優先遍歷) Input 輸入第一行為整數n(0< n <100),表示資料的組數。 對於每組

2141 資料結構實驗論一:基於鄰接矩陣的廣度優先搜尋(方法2)

資料結構實驗之圖論一:基於鄰接矩陣的廣度優先搜尋遍歷 Time Limit: 1000MS Memory Limit: 65536KB Problem Description 給定一個無向連通圖,

SDUT- 2107 資料結構實驗論二:的深度

#include <stdio.h> #include <string.h> #include <stdlib.h> int a[105][105]; int vis[105]; int qu[10005], front, tail, fl

sdut_2107_資料結構實驗論二:的深度

資料結構實驗之圖論二:圖的深度遍歷 Time Limit: 1000 ms Memory Limit: 65536 KiB Problem Description 請定一個無向圖,頂點編號從0到n-1,用深度優先搜尋(DFS),遍歷並輸出。遍歷時,先遍歷節點編號小的

資料結構實驗論二:基於鄰接表的廣度優先搜尋

Problem Description 給定一個無向連通圖,頂點編號從0到n-1,用廣度優先搜尋(BFS)遍歷,輸出從某個頂點出發的遍歷序列。(同一個結點的同層鄰接點,節點編號小的優先遍歷) Input 輸入第一行為整數n(0< n <100)

資料結構實驗論二:的深度 oj

Problem Description 請定一個無向圖,頂點編號從0到n-1,用深度優先搜尋(DFS),遍歷並輸出。遍歷時,先遍歷節點編號小的。 Input 輸入第一行為整數n(0 < n < 100),表示資料的組數。 對於每組資料,第一行是兩個整數k,m(0 < k < 100,0 <

資料結構實驗論二:基於鄰接表的廣度優先搜尋 sdut 2142

#include <stdio.h> #include <stdlib.h> #include<string.h> struct node { int data; struct node *next; }; struct n

SDUT 2142 資料結構實驗論二:基於鄰接表的廣度優先搜尋

點選開啟題目連結#include <bits/stdc++.h> using namespace std; struct node { int data; node *next; }; node *head[1010], *p; void B

2107 資料結構實驗論二:的深度

#include <iostream> #include <cstdlib> #include <cstring> int sum; using namespace std; int vis[100]

SDUT OJ 資料結構實驗論二:的深度

資料結構實驗之圖論二:圖的深度遍歷 Time Limit: 1000 ms Memory Limit: 65536 KiB Problem Description 請定一個無向圖,頂點編號從0到n-1,用深度優先搜尋(DFS),遍歷並輸出。遍歷時,先遍歷節點編號小的

資料結構實驗論一:基於鄰接矩陣的廣度優先搜尋 oj

  #include <stdio.h> int map[220][220],vis[220],ans[220]; int a = 0,b = 1; int k,t; void bfs(int n) { a++; for(int i = 0;i <k;i++) {

2141-資料結構實驗論一:基於鄰接矩陣的廣度優先搜尋

#include <iostream> #include <cmath> #include <cstdlib> #include <queue> #inc