3

C++ でループを使用してレモン グラフを作成する可能性はありますか?

私の問題:

  1. 列を持つデータベース テーブル (t_nodes と呼びましょう): node
  2. グラフ情報を含むデータベース テーブル (t_edges と呼びましょう): ノード2 | エッジスコア
  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];
  }

}
4

1 に答える 1

0

もちろん、ループ内で AddNode と AddArc を実行できます。または再帰関数で。または、あなたが望む他の方法で。

試してみましたか?何かエラーがありましたか?

于 2012-10-24T16:09:35.497 に答える