2012-04-17 28 views
2

從我可以收集如何使用BGL,以便從非得要我的C++ Boost圖庫:構建一個在無向圖搜索中訪問過的頂點向量?

class MyVisitor : public boost::default_dfs_visitor 
{ 
    public: 
    void discover_vertex(MyVertex v, const MyGraph& g) const 
{ 
    cerr << v << endl; 
    return; 
} 

}; 


void bfsMethod(Graph g, int rootNodeId) 
{ 

    boost::undirected_dfs(g, vertex(rootNodeId,g), boost::visitor(vis)); 

} 

現在線做一些已知的根節點調用圖的DFS,我不知道我怎麼改變這使得vertexId(或指針)的std::vector被構建爲DFS以與如何使用最小生成樹算法類似的方式訪問圖中的所有頂點,例如

std::vector <JPEdge> spanning_tree; 
kruskal_minimum_spanning_tree(g, std::back_inserter(spanning_tree)); 

回答

1

該矢量必須是您的訪問者的成員。在discover_vertex函數中,只需將發現的元素推入矢量。

class MyVisitor : public boost::default_dfs_visitor 
{ 
    public: 
    void discover_vertex(MyVertex v, const MyGraph& g) const 
{ 
    cerr << v << endl; 
    vv.push_back(v); 
    return; 
} 

    vector<MyVertex> GetVector() const {return vv; } 

private: 
vector<MyVertex> vv; 

}; 

void bfsMethod(Graph g, int rootNodeId) 
{ 
    MyVisitor vis; 
    boost::undirected_dfs(g, vertex(rootNodeId,g), vis); 
    vector<MyVertex> vctr = vis.GetVector(); 

} 
+0

感謝這是我懷疑,但那麼如何調用boost :: undirected_dfs /檢索MyVertex的向量?在MyVisitor中只需要一個公共的getVV方法,還是有一種類似於kruskal調用的更奇特的方式? – oracle3001 2012-04-17 11:11:08

+0

@ oracle3001:查看我的更新 – 2012-04-17 11:15:25

+0

感謝您的幫助 – oracle3001 2012-04-17 11:25:15