STL 模版存访问点的顺序报 RE,改成手写栈 AC
#include <cstdio>
#include <algorithm>
#include <stack>
const int MAXN = 1e5, MAXM = 5e5;
int n, m;
int cnt, head[MAXN + 5];
struct node {
int v, n;
} e[2 * MAXM + 5];
void add(int u, int v) {
e[++cnt] = {v, head[u]};
head[u] = cnt;
}
int start[MAXN + 5];
std::stack<int> res;
bool vis[2 * MAXM + 5];
void dfs(int p) {
for (int i = head[p]; i; i = e[i].n) {
if (vis[i]) { continue; }
vis[i] = true;
dfs(e[i].v);
}
// STL 模版
res.push(p);
}
int main() {
scanf("%d%d", &n, &m);
int u, v;
for (int i = 1; i <= m; i++) {
scanf("%d%d", &u, &v);
add(u, v); add(v, u);
}
dfs(1);
while (!res.empty()) {
printf("%d\n", res.top());
res.pop();
}
return 0;
}
#include <cstdio>
#include <algorithm>
const int MAXN = 1e4, MAXM = 5e4;
int n, m;
int cnt, head[MAXN + 5];
struct node {
int v, n;
} e[2 * MAXM + 5];
void add(int u, int v) {
e[++cnt] = {v, head[u]};
head[u] = cnt;
}
int start[MAXN + 5], ans[2 * MAXM + 5];
bool vis[2 * MAXM + 5];
void dfs(int p) {
for (int i = head[p]; i; i = e[i].n) {
if (vis[i]) { continue; }
vis[i] = true;
dfs(e[i].v);
}
// 此处改为手写栈
ans[++ans[0]] = p;
}
int main() {
scanf("%d%d", &n, &m);
int u, v;
for (int i = 1; i <= m; i++) {
scanf("%d%d", &u, &v);
add(u, v); add(v, u);
}
dfs(1);
for (int i = ans[0]; i >= 1; i--) {
printf("%d\n", ans[i]);
}
return 0;
}
有人知道为什么吗