能够跑通样例
#include<bits/stdc++.h>
using namespace std;
int n, m; // n个点、m条边
vector<bool> vis; // 每个点是否访问过
vector<vector<int>> adj_list; // 临接链表
void dfs(int u) {
if (vis[u]) return;
vis[u] = true;
cout<<u<<" ";
for (int i = 0; i < adj_list[u].size(); ++i)
dfs(adj_list[u][i]);
}
void bfs(int u) {
queue<int> Q;
Q.push(u);
vis[u] = 1;
int v;
while (!Q.empty()) {
u = Q.front();
Q.pop();
cout<<u<<" ";
for (int i = 0; i < adj_list[u].size(); ++i){
v = adj_list[u][i];
if (!vis[v]) {
Q.push(v);
vis[v] = 1; // 防止重复入队
}
}
}
}
int main(){
cin >> n >> m;
vis.resize(n + 1, false); // 初始化
adj_list.resize(n + 1);
int u, v;
for (int i = 1; i <= m; ++i) {
cin >> u >> v;
adj_list[u].push_back(v); // 计入邻接链表
}
dfs(1);
for(int i = 0; i<= n; i++){
vis[i] = false;
}
cout<<endl;
bfs(1);
return 0;
}