Вы можете использовать библиотеку Boost.Graph .
Поначалу очень сложно, но обеспечивает эффективное хранение данных и высоко оптимизированные реализации алгоритмов графов.
С сайта:
Алгоритмы
Алгоритмы BGL состоят из базового набора шаблонов алгоритмов (реализованных в виде общих алгоритмов) и большего набора графовых алгоритмов.Основные шаблоны алгоритмов:
- Поиск по ширине
- Поиск по глубине
- Поиск по равномерной стоимости
Сами по себе шаблоны алгоритмовне вычисляйте какие-либо значимые величины на графиках;они являются просто строительными блоками для построения графовых алгоритмов.Графические алгоритмы в BGL в настоящее время включают
- Кратчайшие пути Дейкстры
- Кратчайшие пути Беллмана-Форда
- Кратчайшие пути Джонсона на всех парах
- КрускалаМинимальное связующее дерево
- Минимальное остовное дерево Прима
- Связанные компоненты
- Сильно связанные компоненты
- Динамически связанные компоненты (с использованием несвязанных наборов)
- Топологическая сортировка транспонирования
- Обратное упорядочение Кутхилла Макки
- Наименьшее последнее упорядочение вершин
- Последовательное окрашивание вершин
Структуры данных
TheВ настоящее время BGL предоставляет два класса графов и адаптер списка ребер:
- adjacency_list
- adjacency_matrix
- edge_list
Класс adjacency_list
является универсальным «швейцарским армейским ножом» графовых классов.Он сильно параметризован, так что его можно оптимизировать для различных ситуаций: график направлен или ненаправлен, разрешить или запретить параллельные ребра, эффективный доступ только к ребрам или к ребрам, быструю вставку и удаление вершин назатраты на дополнительное пространство и т. д.
Класс adjacency_matrix
хранит ребра в | V |x | V |матрица (где | V | - количество вершин).Элементы этой матрицы представляют ребра в графе.Представления матрицы смежности особенно подходят для очень плотных графов, т. Е. Тех, где число ребер приближается к | V | 2.
Класс edge_list
является адаптером, который принимает любой вид итераторов ребер и реализует реброГрафик списка.