给定G图'和节点矩阵,如何找到一定长度的2个给定节点之间的路径数?
我已经考虑过多次矩阵k次,然后找到Ak [i,j],但我不知道构建算法,还是在复杂性方面它是最好的解决方案?
答案 0 :(得分:1)
如果要查找长度为k
的两个节点之间的所有路径,只需将邻接矩阵乘以k
次。
原因很简单:
如果有边ij
和边js
,则会有is
到j
的路径。条目ii
是节点i
的度数。
以下是图表的邻接矩阵:
0 1 1 0 0 0 0 0 0 0
0 1 1 0 0 1 0 0 0 0
0 0 0 1 1 0 0 0 0 0
1 0 0 1 1 0 0 0 0 0
0 0 0 0 1 1 1 0 1 0
1 0 0 0 0 0 0 1 0 0
0 0 0 0 0 0 1 1 1 0
0 0 0 0 0 0 0 1 0 1
0 0 0 0 0 0 0 1 0 1
0 0 0 1 0 0 0 0 0 1
我们想要找到节点2和5之间长度为3的路径数。为此,我们需要找到A_3[2, 5]
。
有很多用于矩阵乘法的算法,某些语言内置了这些算法。
因此,如果我们的约会矩阵被称为A
,我们需要A * A * A
。
这给了我们:
2 1 1 2 3 2 1 1 1 0
2 2 2 2 3 2 1 2 1 1
2 1 1 1 3 2 3 3 3 1
2 2 2 2 4 3 3 3 3 1
1 1 1 1 1 1 3 8 3 6
0 1 1 2 1 1 0 1 0 2
0 0 0 2 0 0 1 5 1 6
1 0 0 3 1 0 0 1 0 3
1 0 0 3 1 0 0 1 0 3
2 1 1 3 3 1 1 0 1 1
当我们找到A_3[2, 5]
时,我们得到2,这是2个节点之间长度为3的路径数。