Есть ли способ создать структуру графа без использования списка смежности или матрицы смежности в C++ boost? (структура вершин с помощью указателей, указывающих на ее соседние вершины)Графическое построение графика без смежности или матрицы смежности
ответ
Возможно, конечно, если ваши данные имеют «черты» теоретического графика, что означает, что вы в основном имеете дело с «вершинами» и «ребрами», даже если в вашем коде они вызываются, скажем, «узлы» и «ссылки».
Эта конструкция называется «BGL-адаптером графа». Однако это может быть немного сложным упражнением на C++. Общая идея заключается в том, чтобы научить BGL много подробностей о ваших данных:
- , что C++ типы данных означает в вашем воображаемом графике и
- как перебираются ваших вершин и ребер.
Итак, вы определяете класс, скажем, MyGraph, который, как правило, очень легкий и просто содержит несколько указателей на ваши данные. Затем вы определяете свои черты, предоставляя специализации шаблона из BGL graph_traits
:
#include <boost/graph/graph_traits.hpp>
namespace boost {
template <>
struct graph_traits<MyGraph>
{
typedef ... vertex_descriptor; //what plays a role of vertex in your data
typedef ... edge_descriptor; //what plays a role of edge in your data
//other typedefs from graph_traits like edge_iterator, out_edge_iterator, etc.
//plus, you specify "categories" of your graph explaining what types of traversal are
//available (more the better)
struct traversal_category
: public virtual boost::vertex_list_graph_tag
, public virtual boost::adjacency_graph_tag
, public virtual boost::bidirectional_graph_tag //means we provide access to in_edges
//and to out_edges of a given vertex
{
};
};
}
После этого вы реализуете глобальные функции, которые обеспечивают доступ и итератор над структурой графа, например:
MyGraph::vertex_descriptor
source(MyGraph::edge_descriptor e, const MyGraph & g);
и
std::pair<MyGraph::out_edge_iterator,
MyGraph::out_edge_iterator>
out_edges(MyGraph::::vertex_descriptor vd, const MyGraph & g)
Существует около десятков таких функций перемещения, предопределенных в BGL graph concepts. Вы должны предоставить, по крайней мере, те, которые относятся к вашему объявлению traversal_category
.
Если все сделано правильно, вы можете использовать свои данные напрямую с помощью алгоритмов BGL без использования одного из предопределенных графиков BGL.
Хорошее объяснение по этому вопросу приведено в главе BGL How to Convert Existing Graphs to BGL
- 1. Построение графика из матрицы смежности
- 2. Ошибка сегментации матрицы смежности графика
- 3. Правильное построение крупной матрицы смежности в R
- 4. Создания матрицы смежности веса
- 5. Создание матрицы смежности из графика JUNG
- 6. Представление матрицы смежности/списка
- 7. matlab преобразование матрицы смежности в список смежности
- 8. Как создать список смежности из матрицы смежности?
- 9. Условный расчет матрицы смежности
- 10. Наименьший размер графика с использованием матрицы смежности или списка
- 11. Оптимизация вычисления матрицы смежности
- 12. Как создать графическое изображение из списка смежности?
- 13. Матрицы сетевого анализа и смежности
- 14. матрицы смежности найти, если neighbores
- 15. Сложность времени и сложности матрицы смежности и списка смежности
- 16. Вычисление матрицы пути из матрицы смежности
- 17. Построение матрицы смежности с узлами с цветовой кодировкой
- 18. Матрица инцидентов вместо матрицы смежности
- 19. Создание матрицы смежности для BFS
- 20. D3.js: Принудительный график из матрицы смежности
- 21. Извлечение матрицы смежности из BGL графа
- 22. LATEX: Создание графика цикла из матрицы смежности 1
- 23. Из матрицы расстояний до матрицы смежности
- 24. преобразование матрицы смежности на расстояние или скачкообразный матрицы
- 25. алгоритм dijkstra с использованием матрицы смежности
- 26. Создание взвешенной матрицы смежности с итерациями
- 27. вычисление PageRank, используя формулу переборе матрицы смежности
- 28. Как сохранить заголовок при симметризации матрицы смежности?
- 29. Список смежности графика, дающий неправильный вывод
- 30. Две реализации создания списков смежности из графика