给定直接图G =(V,E),有什么有效的算法来构建其交叉边缘集?为什么?
P.S .:这不是功课,我只是在准备DS&A决赛,所以我陷入了这个问题。谢谢!
答案 0 :(得分:0)
如果我正确理解,您正在尝试在有向图中找到两端不是彼此祖先的交叉边缘。在这种情况下,您可以修改DFS算法以获取交叉边缘集。由于DFS算法在无向图和有向图中的工作方式相似,因此您需要记录一个顶点的发现时间和完成时间,并添加一个将一个顶点的值与另一个顶点进行比较的函数。例如,圆弧e的两端为u和v。在检查跟在e之后的顶点v的邻居u时,是否已经访问过u并完成了u(即u具有完成时间)并且u的开始时间小于v的开始时间,则e是一个交叉边。一旦算法发现弧为交叉边缘,您就可以将该弧添加到交叉边缘集合中并最终输出该集合。