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;
}
Ich sehe depth_first_visit erfordert einige ColorMap-Eigenschaft. Wie liefert man (Standard) einen? – user4979733
http://stackoverflow.com/questions/11666131/color-map-in-boost-graph-breathth-first-visit – MSN