問題タブ [quickgraph]
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# - QuickGraph シリアライゼーション、カスタム頂点とエッジ
私の目標はBidirectionalGraphを格納することです。
ビッグデータを扱うのでxmlファイルは使えません。残念ながら、プログラムはデータベースなしで動作する必要があります。
したがって、グラフのメモリを効率的にシリアル化する方法が必要です。
.NET シリアライゼーションと GraphML シリアライゼーションを試しました。しかし、どれも機能しませんでした。
.Net を使用すると、BidirectionalGraph- クラスに [Serializable] ステートメントがないため、「暗黙的な参照変換はありません...」というエラーが表示されます。
xmlwriters を使用すると、System.NotSupportedException が発生します: 「Property type MyEdge.Source not supported by the GraphML schema"」
カスタムの頂点クラスとエッジ クラスをシリアル化可能としてマークしました。
エッジクラスIEdge を実装し、2 つの追加の int 属性を持ちます。
VertexClassには、辞書とリストだけでなく、int 属性もあります
。
BidirectionalGraph をシリアル化可能にするか、別の解決策を得るのを手伝ってくれる人がいるかもしれません。
この件についてご協力いただきありがとうございます。
c# - Quickgraph GraphML デシリアライゼーションの Vertex Factory
しばらくこれを探していましたが、何も見つかりませんでした。
C# で Quickgraph を使用して、GraphML からグラフを逆シリアル化しようとしています。Vertex と Edge を表すために使用するクラスは次のとおりです。
そして、メソッド DeserializeFromGraphML を使用してコードを逆シリアル化しようとしています。
makeTest と makeTest2 のコードは次のとおりです。
したがって、私の XML ファイルでは、(0,0,0) と (1,1,1) の 2 つの頂点とそれらの間のエッジを取得しました。それらをデシリアライズすると、エッジは問題ありませんが、頂点は (0,12,0) と (1,12,1) になります。私が見逃しているものがあるはずです(12個はmakeTestメソッドから来ています)が、cos
変数にはグラフの「頂点」の頂点の位置と同じように0と1しかありません(それがMessageBoxに表示されているものです)
一見すると複雑かもしれませんが、本当に単純なのでしょうか? 何か不足していますか?
前もって感謝します!
c# - GraphSharp / QuickSharp ライブラリを使用して WPF プロジェクトに MVVM パターンを実装する方法
注: 私は関連するすべての分野 (WPF、MVVM パターン、GraphSharp/QuickSharp ライブラリ) の初心者です。
GraphSharp ライブラリを使用して単純な有向グラフを表示しようとしています。私はこのデモを見て、非常によく似たコードをいくつか書きました (カスタム Vertex、Edge、Graph、GraphLayout タイプの作成など)。
次に、カスタム Vertex タイプに Status プロパティを追加し、データ テンプレートとスタイル リソースを XAML コードに実装しました (上記のリンクのデモと多少似ています)。これにより、Status プロパティに基づいて頂点コントロールにさまざまなスタイルが適用されます。このために、カスタム Vertex タイプに INotifyPropertyChanged インターフェイスを実装する必要がありました。実行時に頂点の Status プロパティを変更し、スタイルの変更をトリガーするコードもいくつかあります。これまでのところ、これはすべて機能しています。
次に、WPF コードをモデル、ビュー モデル、およびビュー レイヤーに編成する方法についての記事をいくつか読みました。ビュー (できれば XAML コードのみ) は、ビュー モデル クラスとのみ (バインディングを介して) 対話する必要があり、後者は INotifyPropertyChanged を実装し、ビュー モデルは、モデル クラスに実装された「ビジネス ロジック」とのみ通信する必要があります。これはすべて良さそうに聞こえますが、今では何がどこに属しているのかについてかなり混乱しています:
XAML コードはビューであり、ここまでは単純です。
カスタム GraphLayout タイプは、ビュー モデル レイヤーに属しているようです。
カスタム頂点、エッジ、およびグラフ タイプはモデル レイヤーに属していると思います。カスタム頂点型が INotifyPropertyChanged を実装するようになったことを除いて、これはビュー モデル クラスの特徴のようです。
カスタム頂点の Status プロパティを変更するコードは、QuickGraph 基本クラスの機能 (BidirectionalGraph.OutEdges() など) を利用するため、モデル レイヤーに属している必要があります。ただし、カスタム グラフがビュー モデルに属している場合、ビジネス ロジックに関連するものを決定するために、モデル クラスがビュー モデル クラスを呼び出すのはなぜですか。
したがって、主な質問は次のとおりです。このようなプログラムに適したクラス構造は何ですか? モデル、ビュー モデル、ビュー レイヤーに属するクラスはどれですか?
quickgraph - Quickgraph を使用したユーティリティ ネットワーク トレース
ユーティリティ ネットワーク (ソース シンク ノードを持つ有向グラフ) にクイックグラフを使用する予定です。
だからクイックグラフで
前もって感謝します
c# - 頂点の次数を見つける QuickGraph
有向非巡回グラフを作成するために QuickGraph を使用しています。次数がゼロのすべての頂点を見つける必要があります。Vertices
グラフのコレクション、または LINQ を使用してフィルター処理する方法でこのサポートが表示されません。
これが私が作成しているサンプルデータ構造です:
このグラフで、「イン」エッジを持たない (インディグリー = 0) 頂点のリストが必要なだけです。
c# - 方向グラフの2つの任意の頂点間に接続があるかどうかを調べる方法は?
有向グラフの 2 つの任意の頂点間に接続があるかどうかを調べるために、Quickgraph ライブラリ (C#) のどのクラスと関数を使用すればよいか知りたいですか?
私はプログラミング、特にプログラミング アルゴリズムの初心者です。主に、Quickgraph ライブラリには初心者向けの問題固有のチュートリアルがあまりないため、上記の問題のサンプル コードを提供していただけないでしょうか。
グラフ仕様:
- 指示された
- 加重なし (距離は重要ではなく、頂点/エッジ間の接続のみ)
- グラフは動的であるため、頂点/エッジを追加/削除または編集できます。
c# - qucik グラフでの無向グラフ表現
ブースト (C++) グラフ ライブラリのクローンであるQuickGraph .NET ライブラリを使用していますが、このライブラリはまったく初めてなので、いくつか質問があります。次を使用してブーストで簡単に実行できることがわかりました:
adjacency_list<boost::vecS, boost::vecS, boost::undirectedS> Graph;
2- 頂点に値を割り当てるにはどうすればよいですか?
c# - QuickGraph でカスタム頂点を作成するより良い方法は?
いくつかのカスタム プロパティを持つ頂点を持つグラフを作成しようとしています。たとえば、座標"A"
もx, y
関連付けられている頂点を呼び出します。
これは、識別子 astring
と twoを保持するクラスを作成することで実現しましたints
。クラスが関数でうまくAddEdge
機能するようにするために、オーバーライド.Equals
し.GetHashCode
たので、同じ識別子を持つ 2 つの頂点は等しくなり、他のプロパティ (座標など) に関係なく同じハッシュ コードを持ちます。
これはうまくいくようです。組み込みをDijkstraShortestPathAlgorithm
正常に実行できました。
質問
私の質問は、これが最善の方法ですか?それは本当に優雅ではないようです。私は次のような本当に醜い行を書くことになります:
私は簡単に醜いものを減らすことができましたが、私がやっていることはやり過ぎかもしれないと思いました。
私は C# の初心者で、QuickGraph (または Boost Graph) ライブラリを使用したことがありません。単純なプロパティを頂点にアタッチしたいだけです。string
各頂点のプロパティを含む個別の辞書を維持し、頂点クラスを代わりにとして残すこともできると考えていましたCustomVertex
考え?
フルクラス:
そして、グラフの作成は次のようになります