深度优先搜索(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语言代码

 

参考资料

1. 深度优先搜索和广度优先搜索

posted @ 2018-06-20 20:28  苏格拉底的落泪  阅读(1235)  评论(0编辑  收藏  举报