Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/154.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sql-server-2005/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 如何在使用Boost Graph库进行广度优先搜索时访问祖先顶点?_C++_Breadth First Search_Boost Graph - Fatal编程技术网

C++ 如何在使用Boost Graph库进行广度优先搜索时访问祖先顶点?

C++ 如何在使用Boost Graph库进行广度优先搜索时访问祖先顶点?,c++,breadth-first-search,boost-graph,C++,Breadth First Search,Boost Graph,我正在尝试使用Boost Graph库中包含的广度优先搜索算法编写自己版本的连接组件发现,我需要访问祖先(导致发现当前顶点的顶点)使用访问者的discover_vertex回调设置当前顶点的组件编号。 有什么方法可以轻松完成吗?创建一个检查顶点回调,记录正在检查的顶点(从队列中弹出)。该顶点将是正在发现的任何顶点的祖先 根据BGL中的伪代码: 调用vis.u顶点(u,g) 从每个顶点中移除时,在每个顶点中 排队 BFS(G, s) for each vertex u in V[G]

我正在尝试使用Boost Graph库中包含的广度优先搜索算法编写自己版本的连接组件发现,我需要访问祖先(导致发现当前顶点的顶点)使用访问者的discover_vertex回调设置当前顶点的组件编号。
有什么方法可以轻松完成吗?

创建一个检查顶点回调,记录正在检查的顶点(从队列中弹出)。该顶点将是正在发现的任何顶点的祖先

根据BGL中的伪代码:

调用vis.u顶点(u,g) 从每个顶点中移除时,在每个顶点中 排队

BFS(G, s)
  for each vertex u in V[G]
    color[u] := WHITE 
    d[u] := infinity 
    p[u] := u 
  end for
  color[s] := GRAY 
  d[s] := 0 
  ENQUEUE(Q, s)
  while (Q != Ø) 
    u := DEQUEUE(Q)                   # `u` is recorded in examine_vertex callback 
    for each vertex v in Adj[u]
      if (color[v] = WHITE)
        color[v] := GRAY
        d[v] := d[u] + 1  
        p[v] := u  
        ENQUEUE(Q, v)                 # `v` is discovered, `u` is its ancestor.
      else
        if (color[v] = GRAY) 
          ...
        else 
          ...
    end for
    color[u] := BLACK
  end while
  return (d, p)