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

C++ 如何确定BGL中两个顶点之间是否存在路径,c++,graph,dijkstra,boost-graph,C++,Graph,Dijkstra,Boost Graph,我想使用Boost图库来确定有向无权图上的两个节点之间是否存在路径 因此,我尝试使用呼吸优先搜索或Dijkstra,但我被所有这些参数列表弄糊涂了 创建如下函数的最简单方法是什么: bool isPath(src,dest); // doing DFS... bool isPath(int src, int dest) { bool visited[N] = {false}; visited[src] = true; std::stack<int> next; ne

我想使用Boost图库来确定有向无权图上的两个节点之间是否存在路径

因此,我尝试使用呼吸优先搜索或Dijkstra,但我被所有这些参数列表弄糊涂了

创建如下函数的最简单方法是什么:

bool isPath(src,dest);
// 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];
}

使用BGL?

BFS/DFS是最简单的方法。我将草拟DFS解决方案,因为它不需要太多内存

假设您有大小为
nxn
N
是图形中的顶点数)的邻接矩阵
adj
,具有:

  • 1
    adj[i][j]
    中,如果边从
    i
    顶点到
    j
    顶点
  • 0
    否则
  • 在这种情况下,您可以有如下内容:

    bool isPath(src,dest);
    
    // 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];
    }
    
    //正在执行DFS。。。
    bool isPath(内部src,内部dest){
    布尔访问[N]={false};
    访问[src]=真;
    std::堆栈下一步;
    下一步。推送(src);
    而(!next.empty()){
    int cv=next.top();
    next.pop();
    对于(整数nv=0;nv
    我认为BFS是最简单的方法。看看这个。您只需实现
    发现顶点