Ускоренная библиотека графов. Неориентированный граф. - PullRequest
4 голосов
/ 15 сентября 2010

Я использую Boost Graph Library для обработки неориентированного графа, и объявил, что мой граф имеет

typedef property<vertex_index_t, int, property<vertex_name_t, string> > VertexProperty;
typedef adjacency_list<vecS, setS, undirectedS, VertexProperty > UndirectedGraph; 

Как видите, OutEdgeList имеет тип std :: set, и я выбрал его, потому что в документации сказано, что этот тип будет приводить к отсутствию параллельных ребер.

Теперь моя программа читает текстовый файл, в котором указаны ребра между узлами, создает узлы, если они не были видны ранее, и добавляет ребро между ними.

Я недавно запустил код с большим количеством данных и нашел странные результаты. Через несколько часов я обнаружил пользователя, у которого было больше степени, чем количество вершин в графе, поэтому я попробовал код с простым текстовым файлом, который описывал только два ребра между одной и той же парой узлов, но с обратным источником, целью, такой boost выполнит следующее:

add_edge(A,B)
add_edge(B,A)

И заметил, что Boost закончил тем, что добавил оба ребра. out_degree возвращает 2 для них обоих.

Теперь вопрос: я что-то не так делаю? Разве add_edge (a, b) не должен совпадать с add_edge (b, a) для неориентированного графа с setS в качестве типа OutEdgeList?

Спасибо. ;)

1 Ответ

5 голосов
/ 15 сентября 2010

Проблема заключалась в том, что OutEdgeList является первым параметром шаблона, а не вторым, поэтому я фактически использовал vecS, а не setS.

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