【问题标题】:How to determine if a path exists between 2 vertices in BGL如何确定BGL中2个顶点之间是否存在路径
【发布时间】:2015-03-09 13:19:14
【问题描述】:

我想使用 Boost Graph Library 来确定有向未加权图上的 2 个节点之间是否存在路径。

因此,我尝试使用 Breath-First-Search 或 Dijkstra,但我对所有这些参数列表感到困惑。

创建这样的函数的最简单方法是什么:

bool isPath(src,dest);

与 BGL?

【问题讨论】:

  • 我认为 BFS 是最简单的方法。看看这个question。你只需要实现discover_vertex

标签: c++ graph dijkstra boost-graph


【解决方案1】:

BFS/DFS 是最简单的方法。我将草拟 DFS 解决方案,因为它不那么占用内存。

假设您有大小为N x N 的邻接矩阵adjN 是图中的顶点数):

  1. 1 in adj[i][j] 如果你的边从i 顶点到j 顶点,
  2. 0 否则。

在这种情况下,你可以有这样的东西:

// doing DFS...
bool isPath(int src, int dest) {
  bool visited[N] = {false};
  visited[src] = true;
  std::stack<int> next;
  next.push(src);

  while(!next.empty()) {
    int cv = next.top();
    next.pop();

    for (int nv = 0; nv < N; ++nv) {
      if (!visited[nv] && adj[cv][nv] == 1) {
        visited[nv] = true;
        next.push(nv);
      }
    }
  }
  // dest was reached from src?
  return visited[dest];
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-03-04
    • 2018-05-14
    • 1970-01-01
    • 1970-01-01
    • 2014-02-05
    • 2018-01-24
    • 2019-12-23
    • 1970-01-01
    相关资源
    最近更新 更多