社区讨论

为什么输出答案的时候一定要用栈存

P7771【模板】欧拉路径参与者 3已保存回复 4

讨论操作

快速查看讨论及其快照的属性,并进行相关操作。

当前回复
4 条
当前快照
1 份
快照标识符
@lobxmg1o
此快照首次捕获于
2023/10/30 04:37
2 年前
此快照最后确认于
2023/11/04 09:53
2 年前
查看原帖
以下边的遍历已经按照边的出点字典序排序。(如果没写错的话.......)
我原来的代码:
CPP
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上只过了两个点,我也不知道这样错哪里......
后来我按照题解改,改成了下面这样:
CPP
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

回复

4 条回复,欢迎继续交流。

正在加载回复...