2016-05-31 8 views
3

Ich habe ein bidirektionales Diagramm. Einige der Vertices sind nicht verbunden. Ich verwende boost :: depth_first_search, um die Scheitelpunkte zu durchlaufen. Ich liefere auch den Startquellknoten. Ich sehe, dass die nicht verbundenen Vertices auch verarbeitet werden, nachdem die verbundenen Knoten fertig sind. Wie kann ich den Besuch solcher Knoten verhindern? Wie kann ich DFS mitteilen, dass es nur solche Knoten besuchen soll, die vom Quellknoten erreichbar sind, und nichts anderes aufrufen?Boost Graph Library: Verhindern, dass DFS nicht verbundene Knoten besucht

Ich habe den folgenden Code:

/// Define vertex properties. 
struct NodeProperty 
{ 
    unsigned  id;    /// Id. 
    unsigned  kind;   /// Kind. 
    unsigned  depth;   /// Depth. 
    unsigned  layer_color;  /// Layer color. 
    unsigned  signal_color; /// Signal color. 
    unsigned  sch_color;  /// Sch color. 
    CBoundingBox bounds;   /// Bounds of polygon. 

    NodeProperty() 
     : id(0), kind(0), depth(0), layer_color(0), signal_color(0), sch_color(0), bounds(0,0,0,0) 
    { 
     ; 
    } 
}; 
/// Define net topology graph. 
typedef boost::adjacency_list<boost::vecS, boost::vecS, boost::bidirectionalS, NodeProperty> Graph; 

class receiver_visitor : public boost::default_dfs_visitor 
{ 
    public: 
     receiver_visitor(std::vector<Vertex>& r) 
      : res(r) 
     { 
      ; 
     } 

     void discover_vertex(Vertex v, Graph const& g) const 
     { 
      std::cout << "Visit: " << v << std::endl; 
      if (g[v].sch_color) { 
       res.push_back(g[v].sch_color); 
      } 
     } 

     std::vector<Vertex>& res; 
}; 

std::vector<std::size_t> 
NetTopology::getReceivers(std::size_t src) const 
{ 
    std::vector<Vertex> r; 
    receiver_visitor vis(r); 
    boost::depth_first_search(data_->g, boost::visitor(vis).root_vertex(src)); 

    return r; 
} 

Antwort

3

Sie wollen depth_first_visit verwenden, nicht depth_first_search.

+0

Ich sehe depth_first_visit erfordert einige ColorMap-Eigenschaft. Wie liefert man (Standard) einen? – user4979733

+0

http://stackoverflow.com/questions/11666131/color-map-in-boost-graph-breathth-first-visit – MSN