Algorithm 确定有向图是否单向连通的有效算法?

Algorithm 确定有向图是否单向连通的有效算法?,algorithm,Algorithm,有没有有效的算法来确定定向图是否是单向连通的?单侧连通意味着图中从一个顶点到另一个顶点的路径不超过一条。谢谢。事实上,我认为您的定义是错误的,我重新检查了几个来源,发现如果任意两个顶点之间存在路径,则有向图是连通的(或“单向连通的”) 还有 strictly unilaterally connected if it is not strongly connected (对于信息:如果任意两个顶点之间在两个方向上都有路径,则它是“强连接的”) 它实际上并没有说任何关于“一条道路”的事情。简单的单

有没有有效的算法来确定定向图是否是单向连通的?单侧连通意味着图中从一个顶点到另一个顶点的路径不超过一条。谢谢。

事实上,我认为您的定义是错误的,我重新检查了几个来源,发现如果任意两个顶点之间存在路径,则有向图是连通的(或“单向连通的”)

还有

strictly unilaterally connected if it is not strongly connected
(对于信息:
如果任意两个顶点之间在两个方向上都有路径,则它是“强连接的”

它实际上并没有说任何关于“一条道路”的事情。简单的单边连接只是说,如果有一条从a到B的路径,就没有从B到a的路径(但从a到B仍然可以有10条路径)


算法:

对于“not strict”变体,您可以尝试在每个节点上执行DFS。当DFS在节点“X”上完成时,请记住所有未到达的节点“Y1、Y2、Y3…”。对于所有这些图形,如果在它们上运行DFS,它们必须达到X,否则图形不是单向连接的

对于“strict”变体,它几乎是相同的,但您还必须检查节点“Z1、Z2、Z3”——它们是由节点“X”到达的——在对它们运行DFS时不能到达X


复杂性:

DFS本身是
O(n+k)
(n是节点,k是边),您必须运行它n次(在每个节点上),因此复杂性是
O((n+k)*n)


如果您只想获得与节点相关的最大复杂性,也可以这样做


最大边数是
O(k)=O(n^2)
,因此最大复杂度是
O((n+n^2)*n)=O(n^3)
,因为在任意两个顶点之间只有一条路径的图是树。(或者如果图中没有连接的一个森林)是一个单边连接的简单循环?@ BIZICLOP是一棵树是足够的,但不是必须的:考虑一个5节点图,它的边为-a> C,B-> C,C-> D,C>E.@ SunfTelTrtrue,谢谢你指出这一点。有向图,duh.)(尽管经过再三思考,我说的是正确的:如果任意两个节点之间只有一条路径,那就是一棵树。但这不是问题所在。)@Sneftel:问题在于,在有向图的上下文中,术语“树”的定义并不清楚且唯一。当你在这个上下文中谈论树时,你必须陈述你的确切意思。根据一些定义,您给出的示例实际上是一棵树。看一看。这就是为什么我建议你应该考虑使用更精确的术语:这样你就避免了这种冲突…谢谢你,你是完全正确的。但是我需要一个算法来确定在任意两个顶点之间是否没有超过一条可能的路径。在我的作业中,单向连通图这个术语的定义和我以前写的一样。