假设您有一个未加权的 DAG 和两个顶点,开始 s
和结束 t
。问题是计算从s
到t
长度 1,2,3 ... N-1 的路径数,其中N
是DAG中的顶点数。
我的方法:
构建一个大小为d
的矩阵N*N
,其中d[u][k]
是从u
精确到达s
的方式的数量k
1}}步骤,并设置d[s][0] = 1
查找DAG的拓扑排序TS
现在,对于u
TS
d[u]
克隆为a
a
中的每个元素右移1(即左边插入0,丢弃最右边的元素)v
的每个相邻顶点u
,将数组a
添加到数组d[v]
答案是d[t]
这似乎适用于O(V+EV)
。我想知道是否有更高效的O(V+E)
方式?
答案 0 :(得分:0)
最佳算法很可能 O(VE)
。但是,使用BFS可以实现更简单的实现,允许多次访问顶点(在大多数实际情况下,这将使用比O(V^2)
更少的内存。