Я использую 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?
Спасибо. ;)