algorithm - 有向图 : checking for cycle in adjacency matrix

标签 algorithm matrix graph

关于 DFS 算法是否有另一种方法来检查用邻接矩阵表示的有向图中是否存在循环?

我找到了关于矩阵属性的零碎信息。 也许我可以将矩阵 A 自身乘以 n 次,并检查每个结果矩阵中是否存在非零对角线。

虽然这种方法可能是正确的,但我如何才能显式提取表示循环的顶点列表? 这个假设算法的复杂度如何?

预先感谢您的帮助。

最佳答案

假设在 n 次迭代之后,您有一个矩阵,其中 i 行和 j 列的单元格是 M[n ][i][j]

根据定义 M[n][i][j] = k 的总和 (M[n - 1][i][k] * A[k][j])。假设 M[13][5][5] > 0,这意味着它有一个长度为 13 的循环,从 5 开始到 5 结束。要有 M[13][5] [5] > 0,必须有一些 k 使得 M[12][5][k] * A[k][5] > 0。假设 k = 6,现在您知道循环 (6) 中的另一个节点。它还遵循 M[12][5][6] > 0A[6][5] > 0

要使 M[12][5][6] > 0,必须有一些 k 使得 M[11][5][ k] * A[k][6] > 0。假设 k = 9,现在,您知道循环 (9) 中的另一个节点。它还遵循 M[11][5][9] > 0A[9][6] > 0

然后,您可以重复执行相同的操作以找到循环中的其他节点。

关于algorithm - 有向图 : checking for cycle in adjacency matrix,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34451948/

相关文章:

python - 获取如下所示的 25x2 数组(带有坐标的排序列表)

r - 为什么我从图中得到了错误的邻居

algorithm - 真正大数据的不相交集

生成随机网络的算法

algorithm - 计算步骤以形成算法的递推关系

python - 在 2D numpy 数组的子矩阵上高效运行

r - 如何从矩阵中删除对角元素正方形?

graph - 如何可视化 Fortran(90 或更高版本)源代码,例如使用 Graphviz?

matlab - 在 MATLAB 中对图进行剖面线或着色

algorithm - 仅在 GPU 上求解小对称正定 Ax = b