• 图的BFS与DFS


    前言

    本部分代码的存图方式为 ( ext{vector}) 存图。

    它与标准邻接表差别并不是很大。只是 ( ext{vector}) 比较好写。

    例题

    题目链接

    题目给我们一个有向图,要求我们求出从一个入度为 (0) 的点开始,DFS 和 BFS 的遍历顺序。

    请对这个图分别进行 DFS 和 BFS,并输出遍历结果。如果有很多点可以遍历,请先遍历编号较小的那个点 (因此你可能需要先排序)。

    输入样例

    8 9
    1 2
    1 3
    1 4
    2 5
    2 6
    3 7
    4 7
    4 8
    7 8
    

    输出样例

    1 2 5 6 3 7 8 4 
    1 2 3 4 5 6 7 8 
    

    DFS

    直接感性理解,深搜即可。无任何难度。

    void dfs(ll s)
    {
        vis[s] = 1;
        ans.push_back(s);
        for (int i = 0; i < t[s].size(); ++i)
            if (!vis[t[s][i]])
                dfs(t[s][i]);
    }
    

    BFS

    关于如何广搜,这里我就不再讲解。具体可以查看大佬博客

    这里只放代码作为参考。

    void bfs(ll s)
    {
        queue<ll> q;
        q.push(s);
        vis[s] = 1;
        while (!q.empty())
        {
            ll x = q.front();
            ans.push_back(x);
            q.pop();
            for (ll i = 0; i < t[x].size(); ++i)
            {
                if (!vis[t[x][i]])
                {
                    q.push(t[x][i]);
                    vis[t[x][i]] = 1;
                }
            }
        }
    }
    
  • 相关阅读:
    2020.11.17
    2020.11.26
    2020.11.18
    2020.12.01
    2020.11.23
    Java编程规范
    20201003 千锤百炼软工人
    2020081920200825 千锤百炼软工人
    20201004 千锤百炼软工人
    20200929 动手动脑
  • 原文地址:https://www.cnblogs.com/EdisonBa/p/14964649.html
Copyright © 2020-2023  润新知