Народ если кто пользовался подскажите плиз...
сам граф работает, но еще не до конца разобрался с пропертисами вершин и ребер... которые используются в алгоритмах..
мой граф выглядит так..
typedef adjacency_list<listS,listS,undirectedS,VERTEX,EDGE> GraphType;
для него сделан класс оболочка...и в нем описаны структуры VERTEX,EDGE... но это не суть
вопрос..
как найти "острова" в этом графе или вообще в графе у которого есть пользовательские свойства для вершин и ребер
нужно использовать static connected components или incremented conneceted components... согласно докам
как? в примерах все графы без переданных в шаблоне типов структур со свойствами для ребер и вершин, то есть
typedef adjacency_list<vecS,vecS,undirectedS>
из примера кусок кода беру — компилится.., подставляю вместо vecS listS, задаю свойства вершин и ребер параметром шаблона и не компилится..
я понял что нужно сделать property_map .. ладно дальше объяснять бесполезно, если делали, то знаете.. если нет то не поможете
ХЕЛП!!!!
Re: boost/graph поиск несвязаных между собой наборов вершин
или как сделать property_map... чтобы передать его параметром в алгоритм..
кхм... мда.. буст навороченная штука
Re: boost/graph поиск несвязаных между собой наборов вершин
От:
Аноним
Дата:
07.11.07 11:40
Оценка:
По всей видимости Вам необходимо использовать associative_property_map, он описан <boost\property_map.hpp>. Там есть вспомогательная функция make_assoc_property_map. Этот класс/функция используется для фтыкания ассоциативных контейнеров типа std::map в алгоритмы BGL в виде отображений свойств. Для определения "островов", то есть компонент связности, в Вашем случае неориентированного графа лучше использовать connected_components. Во всяком случае у меня получилось, правда для хранения вершин я использовал vecS. В вашем случае надо примерно так:
//потом где-то в вызове connected_components передать ass_map, примерно так
//int com_count=connected_components(graph, ass_map);
//или
//int com_count=connected_components(graph, make_assoc_property_map(comp_map));
потом уже из comp_map извлекать номер компоненты дял каждого дескриптора вершины.
Я так в принципе не делал, но думаю будет работать. А ввобще есть хорошая книжка на русском по Boost Graph Library, на Books.ru купил, не нарадуюсь
Re[2]: boost/graph поиск несвязаных между собой наборов вер
книжка уже в пути (скоро доставят), давно собирался купить ее но не особо нужна была, а тут
по работе приперло и наконец то с радостью заказал в изд.Питер..
обязательно попробую ваш метод, что получилось отпишу
thanx
Re[2]: boost/graph поиск несвязаных между собой наборов вер
associative_property_map<ComponentMap> ass_map = make_assoc_property_map(comp_map);
int com_count = connected_components(G, ass_map);
а если заменить первую строку на
typedef adjacency_list < listS, listS, undirectedS, BallsGraph::VERTEX, BallsGraph::EDGE > GraphType;
то есть вторым параметром поставить listS
ошибка
error C2679: binary '+' : no operator found which takes a right-hand operand of type 'const boost::detail::error_property_not_found' (or there is no acceptable conversion)
ключевой момент видимо error_property_not_found
Re: boost/graph поиск несвязаных между собой наборов вершин
От:
Аноним
Дата:
08.11.07 06:21
Оценка:
Вот такой код у меня в VC 6.0 компилитца. Не знаю как насчет работы. Тут, видимо, дело в color_map, если тип дескриптора вершины не целый, то надо фтыкать соответствующее отображение для раскраски вершин. Там по молчку вектор размером в число вершин, а для listS это не подходит.