Как создать лес связующих деревьев в Библиотеке графов Boost? - PullRequest
0 голосов
/ 11 декабря 2018

Я новичок в библиотеке графов Boost, но она кажется довольно мощной.Используя другие посты, которые я нашел, мне удалось создать неориентированный граф с вершинами / ребрами, в котором есть пользовательские классы для хранения другой необходимой мне информации.Мне также удалось создать связующее дерево указанного графа.После создания связующего дерева я делаю DFS, начиная с исходной вершины, и выполняю необходимую обработку в посетителе.Основной раздел моего кода, который достигает этого, приведен ниже:

struct InSpanning {
                std::set<EdgeDescriptor> edges;
                bool operator()(EdgeDescriptor e) const { return edges.count(e); }
            } spanning;

            boost::kruskal_minimum_spanning_tree(graph, std::inserter(spanning.edges, spanning.edges.end()), boost::weight_map(get(&EdgeInfo::weight, graph)));
            MyVisitor vis();
            boost::filtered_graph<Graph, InSpanning, boost::keep_all> mst(graph, spanning, {});
            boost::depth_first_search(mst, visitor(vis).root_vertex(0));

Теперь мой вопрос, как мне справиться со случаем, когда мой график отключен?Я знаю, что могу идентифицировать этот случай с помощью boost :: connected_components, но мне не ясно, как на самом деле изменить мой сегмент кода выше, так как я хотел бы продолжать использовать kruskal.Основываясь на документации, кажется, что мои два варианта - это фильтрованный_граф или подграф?Честно говоря, кажется, что фильтрованный граф каждого связанного компонента будет наиболее разумным?Моя проблема в том, что kruskal принимает граф в качестве первого аргумента, и в моем коде я использую связующее дерево для создания фильтрованного графа в первую очередь.Итак, я застрял с круговой проблемой.Как перейти от отфильтрованного графа или подграфа к графическому объекту, чтобы удовлетворить функцию для создания леса связующих деревьев?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...