如何确定BGL中2个顶点之间是否存在路径

时间:2015-03-09 13:19:14

标签: c++ graph dijkstra boost-graph

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

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

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

bool isPath(src,dest);

用BGL?

1 个答案:

答案 0 :(得分:1)

BFS / DFS是最简单的方法。我将草拟DFS解决方案,因为它的内存消耗较少。

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

    {li> 1 adj[i][j]如果您的边缘从i顶点到j顶点,
  1. 0否则。
  2. 在这种情况下,你可以这样:

    // 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];
    }