Я пытаюсь найти все ребра, которые являются частью любого цикла в неориентированном Графе. Используя Boost's depth_first_search и мое понимание back edges, я не понимаю, почему метод back_edge
вызывается для обоих ребер в образце Graph, который не содержит циклов.Boost DFS back_edge
#include <boost/config.hpp>
#include <boost/graph/adjacency_list.hpp>
#include <boost/graph/depth_first_search.hpp>
using namespace std;
using namespace boost;
typedef adjacency_list<vecS, vecS, undirectedS, no_property, property<edge_weight_t, int> > Graph;
typedef graph_traits<Graph>::edge_descriptor Edge;
class MyVisitor : public default_dfs_visitor {
public: void back_edge(Edge e, const Graph& g) const {
// should only be called when cycle found, right?
cerr << "back_edge " << e << endl;
return;
}
};
int main() {
Graph g;
add_edge(0, 1, g);
add_edge(0, 2, g);
MyVisitor vis;
depth_first_search(g, visitor(vis));
return 0;
}
Как в этом примере мы можем 'record_predecessor' on_back_edge() события? – Bruce
@Bruce Я думаю, что более полезно опубликовать это как новый вопрос – sehe
Я сделал это сообщение: https://stackoverflow.com/questions/47419307/recording-predecessors-in-a-dfs-search-in-an-undirected -граф – Bruce