zoukankan      html  css  js  c++  java
  • 图的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;
                }
            }
        }
    }
    
  • 相关阅读:
    servlet
    过滤器
    拦截器
    logback
    hibernate(1)
    函数的关键字参数
    函数的不定长参数
    打印星形三角
    九九乘法表
    udp客户端收发数据流程
  • 原文地址:https://www.cnblogs.com/EdisonBa/p/14964649.html
Copyright © 2011-2022 走看看