Напишите связанные компоненты графа, используя Boost Graph - PullRequest
2 голосов
/ 01 июня 2010

У меня есть файл, который представляет собой длинный список взвешенных ребер, в следующем виде

node1_id node2_id weight
node1_id node3_id weight

и так далее. Таким образом, одно взвешенное ребро на строку.

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

Эта проблема в принципе проста, просто я не уверен, как правильно ее реализовать, потому что я не знаю, как работать с Boost Graph. Я уже потратил несколько часов и у меня есть код, который найдет подключенные компоненты, но моя версия, конечно, намного длиннее и сложнее, чем необходимо - я надеюсь, что есть ниндзя-буст-граф, который может показать мне правильное, простой способ.

Поскольку это было запрошено, вот код, который у меня есть. Я не думаю, что я использую повышение здесь наиболее эффективным или изящным способом, и это решение не является полным (я не беру подграфы и распечатываю каждый из их краев в отдельные файлы). #включают #включают #включают #включают #включают #include

using namespace std;

typedef adjacency_list <vecS,
                        vecS,
                        undirectedS,
                        property<edge_weight_t float>
                        > AdjListGraph;

void writeConnectedComponents(char *filename)
{
  AdjListGraph G;
  ifstream inputFile;
  inputFile.open(filename);  
  unsigned int id1, id2;
  float weight;
  string lineread;
  stringstream ss;
  while(getline(inputFile, lineread))
    {
      ss.clear();
      ss.str("");
      ss << lineread;
      ss >> id1;
      ss >> id2;
      ss >> weight;
      add_edge(id1, id2, weight, G);
    }
  /* Following vector contains the component number of each node */
  vector<int> components(num_vertices(G));

1 Ответ

3 голосов
/ 01 июня 2010

Я использовал Boost.Graph для сборки Gnocchi .

Кривая обучения довольно крутая.Мне кажется, важно получить книгу об этой библиотеке.Что помогло мне узнать о библиотеке, так это изменить ее так, чтобы она делала то, что я хотел.Позже я узнал, как правильно его использовать.Я коснулся лишь небольшой части библиотеки, но то, как они делали вещи, очень интересно.Есть также привязки для Python, поэтому я думаю, что стоит потратить некоторое время на его изучение.

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