Библиотека графов лимонов C++ - addNode с использованием цикла

Есть ли возможность создать лимонный граф с помощью цикла в C++?

Моя проблема:

  1. Таблица базы данных (назовем ее t_nodes) с column: node
  2. Таблица базы данных (назовем ее t_edges) с графической информацией: node1 | узел2 | edgeScore
  3. Более 10000 записей

Мой желаемый результат:

  1. Ориентированный граф: например, N1 -> N2; N2 -> N3; N3 -> N1

Мой вопрос

  1. Можно ли использовать цикл для каждой записи в t_nodes таблица для добавления узла на график

    • До сих пор я только нашел реализации, где они добавляют каждый узел вручную (см. Пример ниже)
    • Неужели нет возможности использовать цикл для добавления узлов в граф Лимона?
  2. Как я могу использовать цикл для всех отношений, упомянутых в t_edges?

Спасибо за ваше время и любая помощь с благодарностью!


Проведя свободное время на выходных и потратив немного времени на велосипед, я нашел решение:)

Мое решение:

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

Взгляните на разработанный пример скрипта (очень тривиально;))


Lemon C++ - Пример кода (ссылка: http://lemon.cs.elte.hu/pub/tutorial/a00022.html):

 /* -*- mode: C++; indent-tabs-mode: nil; -*-
 *
 * This file is a part of LEMON, a generic C++ optimization library.
 *
 * Copyright (C) 2003-2010
 * Egervary Jeno Kombinatorikus Optimalizalasi Kutatocsoport
 * (Egervary Research Group on Combinatorial Optimization, EGRES).
 *
 * Permission to use, modify and distribute this software is granted
 * provided that this copyright notice appears in all copies. For
 * precise terms see the accompanying LICENSE file.
 *
 * This software is provided "AS IS" with no warranty of any kind,
 * express or implied, and with no claim as to its suitability for any
 * purpose.
 *
 */


#include <iostream>
#include <lemon/list_graph.h>

using namespace lemon;
using namespace std;

int main()
{
  ListDigraph g;


  ListDigraph::Node u = g.addNode();
  ListDigraph::Node v = g.addNode();
  ListDigraph::Arc  a = g.addArc(u, v);

  cout << "Hello World! This is LEMON library here." << endl;
  cout << "We have a directed graph with " << countNodes(g) << " nodes "
       << "and " << countArcs(g) << " arc." << endl;

  return 0;


  // Further development
  ListDigraph graph;

  vector <string> name;
  name.push_back("A");
  name.push_back("B");
  name.push_back("C");

  for (unsigned int n=0; n<name.size(); n++) {
      ListDigraph::Node node = graph.addNode();
      lemon_node_vector[n].id = n;
      lemon_node_vector[n].name = name[n];
  }

}

1 ответ

Конечно, вы можете выполнить AddNode и AddArc в цикле. Или в рекурсивной функции. Или любым другим способом, которым вы хотите.

Вы пробовали это? Была ли какая-то ошибка?

Другие вопросы по тегам