問題タブ [boost-graph]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c++ - struct defined outside or inside a class template
I have a defined a simple template class. In this class I define a structure (struct NodeData) which is used for nodes of a graph. For the first code I give bellow, there is no compilation error even if I do an error on purpose in the method test (I do g[nId].anything = "something"
even if struct NodeData dont have a variable called anything).
To understand where is the problem, in the second code I give bellow I have put my structs definitions and typedefs outside of MyClass. I have put template<typename T1, typename T2>
on top of the definition of struct NodeData because this struct need to store 2 variables of abstract type T1 and T2. I also removed the keyword typename
from the typedefs, and I have put NodeData<int, int>
instead of NodeData
in the first typedef (even if I don't want to do that actually), otherways it will give some errors at this line like: expected a type, got 'NodeData'
. When I compile, it gives the following expected error (which is totally normal actually): 'struct NodeData<int, int>' has no member named 'anything'
, while for the first code I didn't get this error !
What is the difference between this two codes ? How can I do for the second code to not be obliged to specify NodeData for the first typedef (because members var1 and var2 of struct NodeData are not necessarily of type int) ? Or how can I do for the first code to work correctly and detect the error that NodeData has no member named anything
?
First code:
Second code:
c++ - 有向グラフのすべてのエッジをループして、ソース + 宛先を取得する方法
設定 typedef で作成された有向グラフに一連のノードと頂点を追加しましたboost::adjacency_list<boost::listS, boost::vecS, boost::directedS, Node, Edge> graph;
Node
ノード名の文字列とEdge
そのスコアの int があります。すべてのエッジをループして、ソース名とターゲット名、およびそのエッジのスコアを出力しようとしています。
を使用してエッジ上のイテレータを取得my_graph.m_edges.begin()
できます。これは、 getm_source
およびに逆参照できますm_target
。
ソース ノードとターゲット ノードに割り当てられた名前と、そのエッジのスコアを取得するにはどうすればよいですか?
boost - エッジ リストのカスタム連想コンテナを使用した BGL エッジ (u、v、g)
私は bgl の学習を始めたばかりで、adjacency_list のエッジ リストのコンテナーとしてカスタム順序で std::set を使用しているときに問題に遭遇しました。order_out_edges.cpp の例と同様に、operator< を定義して、エッジのプロパティに基づいてエッジを並べ替えます。ここで boost::edge_unique_ordering はカスタム プロパティ タグです。
一般的には正常に動作していますが、edge(u, v, g) 関数を使用するとイテレータ例外が発生します。これらの呼び出しを回避策に置き換えて、(ソース、ターゲット) によるエッジの要求を回避すると、すべて正常に動作します。
ブーストコードを調べたところ、原因がわかっていると確信しています。何か間違ったことをしているのか、ブーストコードの問題なのか、文書化されていない非互換性なのかはわかりません. この関数は、u のアウト エッジ リスト コンテナーで set::find(StoredEdge(v)) を呼び出します。現在、デフォルトの stored_edge::operator< はターゲット頂点を比較するだけですが、私の場合、カスタム operator< が呼び出されており、検索されている StoredEdge(v) は明らかにデフォルトでプロパティなしで初期化されており、これがおそらく原因です問題。edge(u, v, g) は、コンテナー内のエッジに課されている順序に関係なく、ターゲット頂点に厳密に基づいて一致を検索する必要があるようです。
私が間違っていることや理解していないことに誰かが光を当てることができますか?
c++ - グラフ (adjacency_list) を別のものにコピーする
タイプ adjacency_list のグラフをタイプ adjacency_list の別のグラフにコピーするにはどうすればよいですか?
visual-studio-2010 - msvc2010でブーストMPIを構築する際のエラー
openmpiをC:\ Program Files \ OpenMPI_v1.5.4-win32 \にインストールし、boostをコンパイルしてグラフ並列ライブラリを作成したいと思います。しかし、次のエラーが発生しました。
Visual Studio 2010コマンドプロンプトで実行した場合:
以下のように、boost_1_48_0 \ tools \ build \ v2\user-config.jamにMPI構成を追加しました。
私はこの同様の質問が以前に尋ねられたと信じていますが、答えはありません:
VisualStudio2010を使用してWindowsでOpenMPIを使用してboost::mpiライブラリを構築する方法
c++ - BGL の実行時テスト
BGL はグラフの概念の概念チェックを提供し、ヘッダーboost/graph/graph_test.hpp
は特定の概念のある種の実行時チェックを提供しているように見えますがUNDER CONSTRUCTION
、最初はその傷があり、2002 年のものです。
BGL 用の他のランタイム テスト スイートはありますか、それとも安全に使用できますか (およびその方法) graph_test.hpp
?
boost - ブースト グラフ ライブラリを使用して無向グラフのサイクルを検出する
私は昨日からこの問題で立ち往生しています。残念ながら/幸いなことに、この問題は私の非常に巨大な(私にとっては、C ++の初心者)アルゴリズムの約0.5%にすぎないため、適応して機能させることができる既存のコードのライブラリが必要です。
無向グラフのすべての円を検出して表示したいと思います。私のエッジは重み付けされていません。はい、私が本当に必要としているのは、すべてのサイクル、つまり、有向グラフのすべてのハミルトニアン サイクルのようなものです。
私はブースト グラフ ライブラリをいじっていましたが、DFS アルゴリズムは非常に有望に思えましたが、頂点を 1 回しか訪れないため、すべてのハミルトニアン サークルを与えることはできません。
現時点では、アルゴリズムの設計を続行できるように、コードが機能するだけで済みます。その後、パフォーマンスの問題を検討する可能性があります。5 ネストされた for ループを使用したソリューションも大歓迎です。
これは私がブーストから取得して遊んだコードですが、back_edgesの前任者を記録してアクセスする方法がわかりません。それが解決されたとしても、ブーストDFSは頂点を1回しか訪れません。
上記の例では、通常は 3 サイクルしかないことを示していますが、4 つ以上のサイクルが予想されるため、1 つの頂点が複数のサイクルで表示される可能性があります。back_edge()
そして第二に、ブーストがこのように私に与える3つのサイクルすべてにアクセスすることさえできませんstd::vector<uInt32> fCycle1, fCycle2,fCycle3
. 私が得るのback_edge()
は、ソースとターゲットの頂点だけです。
どんな助けやヒントにも感謝します。これまでのところ、ここにあるすべての例はサイクルまたはその数の存在を検出するだけで、存在するすべてのサイクルを一覧表示する方法を示したものはありません。
c++ - write_graphviz() で構成されたサブグラフを出力する
グラフをストリームにダンプするのに苦労しています。ここで、グラフは の構成されたバージョンですboost::subgraph
。
プロパティライターを提供しようとしましたが、メソッドが必要なようで、基本的に失敗しますboost::get(PropertyWriter, VertexDescriptor)
。グラフが期待どおりに機能しないsubgraph
場合と同じ方法論を使用します。
hereにあるように、 boost::dynamic_properties
(以下のコードを参照)を使用する必要がありますが、グラフが書き込み可能でない場合は失敗します(ドキュメントでは、グラフが構成された参照として使用されることが示されています)。
これは私が仕事に就けない簡単な例です:
どんなヒントでも大歓迎です!どうもありがとう、
編集
私の場合、「失敗」が何を意味するかについて言及するのを忘れていました。コンパイルしようとしたときのエラーは次のとおりです。
エラー: 'std::basic_string<_CharT, _Traits, _Alloc>& std::basic_string<_CharT, _Traits, _Alloc>::operator=(const std::basic_string の 'this' 引数として 'const std::basic_string' を渡しています<_CharT, _Traits, _Alloc>&) [with _CharT = char, _Traits = std::char_traits, _Alloc = std::allocator, std::basic_string<_CharT, _Traits, _Alloc> = std::basic_string]' 修飾子を破棄 [ -fpermissive]
boost-graph - LEDA グラフ v/s Boost グラフ ライブラリ
私は効率を求めており、効率 (=0.9*速度 + 0.1*その他) が高ければ、自分でコードを書いても構わないと思っています。LEDA グラフと Boost グラフのどちらかを選択する場合、どちらを選択する必要がありますか?
私のアルゴリズムは時間がかかります (時間的に非多項式のものもあります)。これは大きなグラフで機能します。
c++ - Boost:: Dijkstra Shortest Path、パス イテレータから頂点インデックスを取得する方法は?
読み始める前に、私の問題を理解するのを助けるために、このリンクからコードをコピーしたことを伝えます: Dijkstra Shortest Path with VertexList = ListS in boost graph
だから..ブーストを使用するようにプログラムコードを書き直していますが、99%の準備ができたとき、GPS(ゲーム用)で立ち往生しています。ノードのリストがあり、幸いなことに簡単にブースト メソッドに変換できるように追加しました。私がする必要があったのは、次のような頂点変数を作成することだけでした:
指定したリンクから typedef をコピーしました。
頂点を追加する方法は次のとおりです。
ここで、「i」は整数です。(例: int i = 9)
また、エゲスも簡単に追加できます。これで、「xNode」と呼ばれる独自の構造化配列ができました。例: xNode[i] は、ノードの XYZ 位置 (xNode[i].X xNode[i].Y など) のすべての情報を保持します。
リンクからコードスニペットを使用するとき、私はこれを行いました:
「source(*pathIterator, dgraph)」と「target(*pathIterator, dgraph)」はアドレスを取得しますが、xNode[i] にアクセスするには頂点インデックスが必要です。i は NodeID (または頂点 ID | Vx[i])。どうやってやるの?
編集:私はやろうとしました:
しかし、これはクラッシュするだけです..