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

标签 arrays algorithm graph-algorithm

假设您有一个未加权的 DAG 和两个顶点,start sendt 。问题是计算从 st 的长度为 1, 2, 3...N-1 的路径有多少条,其中N 是 DAG 中的顶点数。


我的方法:

  • 构建一个大小为N*N的矩阵d,其中d[u][k]是路数在 k 步内从 s 到达 u,并设置 d[s][0] = 1

  • 找到DAG的拓扑排序TS

  • 现在,对于 TS

    中的每个顶点 u
    • 将数组d[u]克隆为a
    • a 中的每个元素右移 1(即,在左边插入 0,舍弃最右边的元素)
    • 对于 u 的每个相邻顶点 v,将数组 a 添加到数组 d[v]<
  • 答案是d[t]

这似乎适用于 O(V+EV)。我想知道是否有更高效的O(V+E)方式?

最佳答案

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

关于arrays - 计算 DAG 中所有长度的路径数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39916952/

相关文章:

c++ - 一种在一维数组(位图)内迭代矩形区域的算法

java - 我需要帮助重命名数组中的元素

algorithm - 使用高斯消除在 GF(2) 中查找矩阵的秩

algorithm - Dijkstra 算法在寻找最短路径方面比 AN* 算法有何优势?

java - 转弯最少的最短路线

c++ - 从体积或区域中的起点向外迭代而不对其进行排序

php - PHP header 中的数组在 WordPress 中不是全局的

c# - 如何在应用程序设置中存储 int[] 数组

algorithm - 确定给定的加权图是否具有唯一的 MST

c++ - 在无向图上设置值