柠檬图库C - 使用循环的addNode

Lemon Graph Library C++ - addNode using loop

本文关键字:循环 addNode 柠檬      更新时间:2023-10-16

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

我的问题:

  1. 一个数据库表(我们称其为t_nodes)用列:节点
  2. 一个数据库表(我们称其为t_edges)带有图形信息:node1 |Node2 |edgescore
  3. 超过10000个条目

我所需的结果:

  1. 有向图:例如N1-> n2;N2-> n3;N3-> N1

我的问题

  1. 是否可以在t_nodes中为每个条目使用循环添加节点

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

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


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

我的解决方案:

看来,柠檬没有提供向图表中边缘提供其他信息的可能性。因此,我刚刚创建了一个用于存储此信息的额外向量。但是,出于某些目的,使用hashmap访问节点可能更明智。

可以查看开发的示例脚本(非常微不足道;))


柠檬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];
  }
}

当然,您可以在循环中执行addNode和addarc。或在递归功能中。或您想要的任何其他方式。

您尝试过吗?有错误吗?