以下边的遍历已经按照边的出点字典序排序。(如果没写错的话.......)
我原来的代码:
void dfs(ll x){
printf("%lld ",x);
if(!head[x]) return ;
ll to=e[head[x]].to;
head[x]=e[head[x]].next;
dfs(to);
}
我原来的思路是模拟跑边,跑到一个点就输出一个点,再往下一条边跑,只要有欧拉路径应该是能遍历完的。如果我这样写的话,其实也可以不用dfs。交到luogu上只过了两个点,我也不知道这样错哪里......
后来我按照题解改,改成了下面这样:
void dfs(ll x){
for(ll i=now[x];i<(ll)e[x].size();i=max(now[x],i+1)){
now[x]=i+1;
dfs(e[x][i]);
}
stack[++top]=x;
}
最后答案从栈弹出。
这样应该是从该点跑欧拉回路,跑完该点的回路后在栈里储存该点。(不知道我这样理解对不对)
感谢大佬为蒟蒻解答QWQ