检查新边是否会使DAG循环

时间:2019-01-09 12:14:11

标签: algorithm graph graph-algorithm directed-acyclic-graphs

给出一些有向图,有很多算法可以检查天气是否包含周期。即具有这样的签名的算法:

function isCyclic(g: DirectedGraph): bool

但是我有一个稍微不同的问题:给定一个有向图,我已经知道它是非循环的,所以我想检查是否添加给定的边会创建一个循环。即是这样的:

function willCreateCycle(g: AcyclicDirectedGraph, newEdge: Edge): bool

到目前为止,我的解决方案是

在图中,我们有一些节点,其中的两个是F(从)和T(到) 我们要检查是否添加新的边E = F-> T是否会创建一个循环

=>

从节点T开始遍历该图。如果我们在任何时候结束于节点F,我们都有一个循环。

你们都认为这是正确的吗? :))

1 个答案:

答案 0 :(得分:0)

是的,这是正确的。仅当已经存在从T到F的路径时,添加边缘F-> T才会导致循环。