为什么输出答案的时候一定要用栈存
查看原帖
为什么输出答案的时候一定要用栈存
97254
big_turkey楼主2021/8/20 19:44

以下边的遍历已经按照边的出点字典序排序。(如果没写错的话.......)

我原来的代码:

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

2021/8/20 19:44
加载中...