深度优先搜索(DFS)和广度优先搜索(BFS)
深度优先搜索(DFS)
广度优先搜索(BFS)
1、介绍
广度优先搜索(BFS)是图的另一种遍历方式,与DFS相对,是以广度优先进行搜索。简言之就是先访问图的顶点,然后广度优先访问其邻接点,然后再依次进行被访问点的邻接点,一层一层访问,直至访问完所有点,遍历结束。
2、无向图的广度优先搜索
下面是无向图的广度优先搜索过程:
所以遍历结果为:A→C→D→F→B→G→E。
3、有向图的广度优先搜索
所以遍历结果为:A→B→C→E→F→D→G。
4. C++代码
1 #include <iostream> 2 #include <queue> 3 using namespace std; 4 5 #define MAX 20 6 7 int visited[MAX]; 8 int map[MAX][MAX]; 9 10 void bfs(int start, int n) 11 { 12 queue<int> q; 13 int q_top; 14 cout << start << " "; 15 visited[start] = 1; 16 for (int i = 0; i <= n; i++) 17 if (map[start][i] == 1 && visited[i] == 0) 18 { 19 q.push(i); 20 visited[i] = 1; 21 } 22 23 while (!q.empty()) 24 { 25 q_top = q.front(); 26 q.pop(); 27 cout << q_top << " "; 28 for (int i = 0; i <= n; i++) 29 if (map[q_top][i] == 1 && visited[i] == 0) 30 { 31 q.push(i); 32 visited[i] = 1; 33 } 34 } 35 } 36 37 int main(int argc, char * argv[]) 38 { 39 int num_vex, num_edge, x, y; 40 cout << "Input number of nodes and edges >> "; 41 cin >> num_vex >> num_edge; //num_vex 顶点; num_edges 边数 42 for (int i = 0; i< MAX; i++) 43 for (int j = 0; j < MAX; j++) 44 map[i][j] = 0; 45 46 for (int i = 0; i <= num_vex; i++) 47 visited[i] = 0; 48 49 for (int i = 1; i <= num_edge; i++) 50 { 51 cin >> x >> y; 52 map[x][y] = map[y][x] = 1; 53 } 54 bfs(2, num_vex); 55 return 0; 56 }
输入输出:
5. C语言代码