给出一些有向图,有很多算法可以检查天气是否包含周期。即具有这样的签名的算法:
function isCyclic(g: DirectedGraph): bool
但是我有一个稍微不同的问题:给定一个有向图,我已经知道它是非循环的,所以我想检查是否添加给定的边会创建一个循环。即是这样的:
function willCreateCycle(g: AcyclicDirectedGraph, newEdge: Edge): bool
到目前为止,我的解决方案是
在图中,我们有一些节点,其中的两个是F(从)和T(到) 我们要检查是否添加新的边E = F-> T是否会创建一个循环
=>
从节点T开始遍历该图。如果我们在任何时候结束于节点F,我们都有一个循环。
你们都认为这是正确的吗? :))
答案 0 :(得分:0)
是的,这是正确的。仅当已经存在从T到F的路径时,添加边缘F-> T才会导致循环。