Lemon Graph Library C ++ - 使用循环添加节点

时间:2012-10-24 15:07:12

标签: c++ graph lemon-graph-library

是否有可能在C ++中使用循环创建柠檬图?

我的问题:

  1. 数据库表(我们称之为t_nodes),列为:node
  2. 一个数据库表(我们称之为t_edges),其中包含图形信息:node1 | node2 | edgeScore
  3. 超过10000个条目
  4. 我想要的结果:

    1. 有向图:例如N1 - > N2; N2 - > N3; N3 - > N1
    2. 我的问题

      1. 是否可以在t_nodes中使用循环将节点添加到图表中

        • 到目前为止,我刚刚找到了手动添加每个节点的实现(参见下面的示例)
        • 是否真的没有机会使用循环将节点添加到柠檬图中?
      2. 如何为t_edges中提到的所有关系使用循环?

      3. 感谢您的时间,非常感谢任何帮助!


        在周末有空闲时间并在我的自行车上花了一些时间后,我找到了解决办法:)

        我的解决方案:

        看来,柠檬没有提供支持图中边缘的附加信息的可能性。因此,我刚刚创建了一个用于存储此信息的附加向量。但是,出于某些目的,使用散列图访问节点可能更为明智。

        看一下开发的示例脚本(非常简单;))


        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 个答案:

答案 0 :(得分:0)

当然,您可以在循环中执行AddNode和AddArc。或者在递归函数中。或者以你想要的任何其他方式。

你尝试过吗?有什么错误吗?