用于没用
//一般DFS
void dfs(int x){
(A) ; //该节点遍历前
for(int i=head[x];i;i=edge[i].next){
if( (B) ){ //判断合法性
(C); //下一节点入栈
dfs(edge[i].to);
(D); //下一节点退出
}
}
(E); //该节点遍历完成
}
dfs(s);
//等价于
//人工栈DFS
int st[N],tpi[N],size;
void dfs(int s){
for(st[size=1]=s;size;){
int x=st[size],&i=tpi[x];
if(!i){
(A); //该节点遍历前
i=head[x];
}else{
(D); //下一节点退出
i=edge[i].next;
}
for(;i&& (B) ;i=edge[i].next); //判断合法性
if(i){
(C); //下一节点入栈
st[++size]=edge[i].to;
}else{
(E); //该节点遍历完成
--size;
}
}
}
dfs(s);
upd2021/2/3:因为年久失修,所以修正了一下。
upd2021/2/27:将变量名换成了更喜闻乐见的形式。