algorithm - 具有有限边数的未加权无向图中两个节点之间的所有路径

标签 algorithm graph path graph-theory shortest-path

我有一个未加权的有向图 G,它可能非常大(数千个节点)。

我有兴趣找到边数有限(路径最多包含 10 条边)的特定两个节点之间的所有可能路径(无循环)。有没有可以处理这个大图的快速算法。

最佳答案

可以修改dfs来解决这个问题。只需添加另一个参数 - 您当前所在的深度,如果在目标节点 target 之前达到路径长度限制,则切断 dfs .为了演示我将使用递归实现的想法,我将使用全局数组 used - 节点在途中访问了这么远。此外,我将假设我们已经使用邻域列表表示法存储了图形(我们称之为 neList,节点 v 的邻居位于 neList[v]):

used[n] = {false}
neList; // neighborhoodList
limit = 10 // max path len
void dfs(int v, int depth) {
  if (depth == limit) {
    if (v == target) {
       print_path
    } else {
       return
    }
  }
  for u in neList[v] {
    if (used[u]) {
      continue;
    }
    used[u] = true
    dfs(u, depth + 1)
    used[u] = false
  }
}

您可以稍微优化此方法 - 首先从目标节点执行 bfs 以计算 target 之间的最小距离和所有节点。在dfs只去找邻居u如果depth + min_dist[u] <= limit .

关于algorithm - 具有有限边数的未加权无向图中两个节点之间的所有路径,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26847797/

相关文章:

c - C 中数组的问题

c++ - 重命名用户指定目录中的所有文件

graph - Gephi API 示例

c++ - 使用图形库/节点网络库还是自己编写?

Android Studio 路径(ANDROID-HOME)无法设置?

linux - 无法将文件和目录添加到 PATH

algorithm - 生成一个不需要猜测的扫雷板

c++ - 用模数环绕网格

algorithm - 使用什么算法来确定使系统进入 "Zero"状态所需的最少操作数?

java - 如何使路径名与不同操作系统兼容?