Я пытаюсь воспроизвести эксперименты, проведенные в эта статья, измеряющая производительность алгоритма на тестовых графиках DIMACS Vertex-Coloring, которые можно найти здесь.
Графики представлены в стандартном формате DIMACS, и я хотел бы проанализировать их в формате библиотеки C++ Boost Graph Library, чтобы я мог запустить на них свой алгоритм.
Я пытался анализировать их, используя существующие функции Boost DIMACS, но документация по ним довольно скудна, поэтому я не совсем понимаю, как именно использовать эти функции. Когда я печатаю график в Graphviz, результат не соответствует файлу DIMACS.
Мне любопытно:
Что я делаю неправильно, используя функции парсинга Boost? (см. пример ниже)
Есть ли лучшая или альтернативная библиотека C++ для простого разбора стандартного графического формата DIMACS?
Вот моя попытка разбора и печати графиков:
#include <cstdlib>
#include <iostream>
#include <boost/property_map/property_map.hpp>
#include <boost/graph/adjacency_list.hpp>
#include <boost/graph/graphviz.hpp>
#include <boost/graph/dimacs.hpp>
#include <fstream>
using namespace boost::graph;
typedef boost::adjacency_list < boost::vecS, boost::vecS, boost::undirectedS > Graph;
typedef typename boost::graph_traits<Graph>::edge_descriptor Edge;
typedef typename boost::graph_traits<Graph>::vertex_descriptor Vertex;
int main()
{
std::ifstream inGraphFile;
inGraphFile.open("myciel4.col");
dimacs_basic_reader reader(inGraphFile, false);
dimacs_basic_reader end;
dimacs_edge_iterator<dimacs_basic_reader> dimacsStart(reader);
dimacs_edge_iterator<dimacs_basic_reader> endIter(end);
Graph g2(dimacsStart, endIter, reader.n_vertices());
boost::write_graphviz(std::cout, g2);
}