zoukankan      html  css  js  c++  java
  • 深度优先搜索(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. 深度优先搜索和广度优先搜索

  • 相关阅读:
    c# 对文件操作
    c# 获取当前绝对路径
    c# 过滤特殊字符
    c# txt代码转换成HTML格式
    c# 对象集合转Json
    c# DataReader转换为Json
    c# DataSet转换为Json
    ABAP-SAP的LUW和DB的LUW的区别
    ABAP-关于隐式与显式的DB Commit
    ABAP-Keyword Documentation
  • 原文地址:https://www.cnblogs.com/sunbines/p/9205767.html
Copyright © 2011-2022 走看看