Algorithm 如何在两个具有一定长度的节点之间查找路径数
给定G图和一个节点矩阵,我如何才能找到特定长度的两个给定节点之间的路径数?Algorithm 如何在两个具有一定长度的节点之间查找路径数,algorithm,matrix,graph-algorithm,Algorithm,Matrix,Graph Algorithm,给定G图和一个节点矩阵,我如何才能找到特定长度的两个给定节点之间的路径数? 我曾想过将矩阵k乘以,然后找到Ak[i,j],但我不知道如何构建算法,或者这是解决复杂度问题的最佳解决方案?如果你想找到两个长度为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
我曾想过将矩阵k乘以,然后找到Ak[i,j],但我不知道如何构建算法,或者这是解决复杂度问题的最佳解决方案?如果你想找到两个长度为
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,这是两个节点之间长度为3的路径数。你在问题中提到了问题的正确解决方案,你是在问如何将矩阵自身相乘吗?你的问题不是很清楚。这个矩阵是什么样子的?你能举个小例子吗?@user3483203给出了行走的次数,而不是路径