如何使用Boost Graph Library在广度优先搜索期间访问祖先顶点?

时间:2010-10-11 23:16:55

标签: c++ breadth-first-search boost-graph

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

1 个答案:

答案 0 :(得分:0)

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

来自BGL的BFS documentation中的伪代码:

  

调用vis.examine_vertex(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)