Files
python/TangDou/LuoGuBook/P5318.cpp
HuangHai 1f397eca87 'commit'
2025-08-30 18:35:01 +08:00

62 lines
1.6 KiB
C++
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#include <bits/stdc++.h>
using namespace std;
const int N = 100010;
int n, m, x, y;
vector<int> p[N];//邻接表
bool st[N]; //是否走过
//深度优先搜索
void dfs(int x) {
//输出当前结点
cout << x << " ";
//找到x结点的所有边依次检查是否走过没走过需要走一下
for (int i = 0; i < p[x].size(); i++)
if (!st[p[x][i]]) st[p[x][i]] = true, dfs(p[x][i]);
}
//广度优先搜索
void bfs() {
queue<int> q;
q.push(1);
while (!q.empty()) {
int x = q.front();
q.pop();
cout << x << " ";
//找到p的所有连接的结点
for (int i = 0; i < p[x].size(); i++)
if (!st[p[x][i]]) {
st[p[x][i]] = true;
q.push(p[x][i]);
}
}
}
int main() {
//读取
cin >> n >> m;
//构建图
for (int i = 1; i <= m; i++) {
cin >> x >> y;
p[x].push_back(y); //有向图,只需要单向加入;无向图需要成对加入
}
//每个结点的对点从小到大排下序
//如果有很多篇文章可以参阅,请先看编号较小的那篇(因此你可能需要先排序)。
for (int i = 1; i <= n; i++) sort(p[i].begin(), p[i].end());//每一个节点的所有相关边,由小到大排序
//准备从第1个结点开始深度优先搜索标识已使用
st[1] = true;
dfs(1);
// 美丽的换行
cout << endl;
//多轮次的输出,一定要记得清空状态数组
memset(st, false, sizeof st);
//广度优先搜索
st[1] = true;
bfs();
return 0;
}