Alc*_*ott 16 graph-theory edge depth-first-search
根据书(算法简介),在dfs中,边被分为4种:
我的问题是,当我试图找出(u,v)是后边缘还是前边缘时,如何确定v是你的祖先还是后代?
jpa*_*cek 19
如果您确实需要它,可以通过维护每个节点的所谓进入和退出时间来检查它.在算法运行期间time,每次遇到新顶点时,都会增加一个变量(当然从0开始).时代entry_t(v),exit_t(v)最初是没有设置的所有顶点.
第一次遇到顶点时,设置entry(v):=time.当您通过上边缘退出顶点(即从堆栈中弹出顶点)时,您可以设置它exit(v):=time.有了这个,你有
entry(u)设置并且exit(u)未设置,则u是当前顶点的祖先(即,vu是后边缘)entry(u)>entry(current),那么你是当前顶点的后代(current-> u是前沿)请注意,这些关系用于在算法运行期间进行检查.算法完成后,基本上检查祖先
u is_descendant_of v = entry(u)>entry(v) and exit(u)<=exit(v)
Run Code Online (Sandbox Code Playgroud)