计算DAG中所有长度的路径数

时间:2016-10-07 12:10:09

标签: arrays algorithm graph-algorithm

假设您有一个未加权的 DAG 和两个顶点,开始 s结束 t。问题是计算从st长度 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)方式?

1 个答案:

答案 0 :(得分:0)

最佳算法很可能 O(VE)。但是,使用BFS可以实现更简单的实现,允许多次访问顶点(在大多数实际情况下,这将使用比O(V^2)更少的内存。