洛谷P5318 【深基18.例3】查找文献 题解 简单DFS/BFS

题目链接:https://www.luogu.com.cn/problem/P5318

题目大意:求图的dfs序及bfs序。

视频讲解地址:https://www.bilibili.com/video/BV1nuFve9Ecu/

示例程序:

#include <bits/stdc++.h>
using namespace std;
const int maxn = 1e5 + 5;

int n, m;
bool vis[maxn]; // vis[u] 表示节点u有没有访问过
vector<int> g[maxn];    // g[u] 都是一个vector,g[u]保存了u连向的所有点

// dfs
void dfs(int u) {
    vis[u] = true;
    cout << u << " ";
    for (auto v : g[u])
        if (!vis[v])
            dfs(v);
}

// bfs
void bfs() {
    queue<int> que; // 队列
    fill(vis+1, vis+n+1, false);
    vis[1] = true;
    que.push(1);
    while (!que.empty()) {
        int u = que.front();
        que.pop();
        cout << u << " ";
        for (auto v : g[u])
            if (!vis[v])
                vis[v] = true, que.push(v);
    }
}

int main() {
    cin >> n >> m;
    while (m--) {
        int u, v;
        cin >> u >> v;
        g[u].push_back(v);
    }
    for (int i = 1; i <= n; i++)
        sort(g[i].begin(), g[i].end());
    dfs(1);
    cout << endl;
    bfs();
    return 0;
}
posted @ 2025-02-01 19:56  quanjun  阅读(57)  评论(0)    收藏  举报