如何查找一定长度的2个节点之间的路径数

时间:2018-01-15 20:19:36

标签: algorithm matrix graph-algorithm

给定G图'和节点矩阵,如何找到一定长度的2个给定节点之间的路径数?
我已经考虑过多次矩阵k次,然后找到Ak [i,j],但我不知道构建算法,还是在复杂性方面它是最好的解决方案?

1 个答案:

答案 0 :(得分:1)

如果要查找长度为k的两个节点之间的所有路径,只需将邻接矩阵乘以k次。

原因很简单: 如果有边ij和边js,则会有isj的路径。条目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的路径数。