0

Boost Graph Libraryに含まれている幅優先探索アルゴリズムを使用して、独自のバージョンの連結成分検出を作成しようとしています。祖先(現在の頂点の検出につながる頂点)頂点にアクセスする必要があります。現在の頂点のコンポーネント番号を設定するための訪問者のdiscover_vertexコールバック。とにかく簡単にできますか?

4

1 に答える 1

0

調べられている(キューからポップされた)頂点を記録するexamine_vertexコールバックを作成します。この頂点は、検出されている頂点の祖先になります。

BGLのBFSドキュメントの擬似コードから:

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)
于 2010-10-18T07:43:15.153 に答える