1

グラフアルゴリズムを実装するためのC++ライブラリを作成しています。クラス「グラフ」の適切な表現について考えています。

グラフ(方向付け/非方向付け)と表現(リスト/マトリックス)の2つの主要なタイプがあります。

アルゴリズムに問題はありませんが、適切で堅牢なデータ構造(必要に応じてクラスの継承シーケンスを含む)を提案したいと思います。

現在、グラフを表す特別なデータ構造は使用していません。静的メソッドには、入力パラメーターとして発生率、隣接行列...があります。

そのようなクラスは、グラフの両方の表現を保持する必要がありますか、それとも両方の表現間の変換関数を持つ1つの表現のみを保持する必要がありますか?どちらが好ましいでしょうか?

この問題は、さまざまなアプローチを使用する多くの人々によって解決されています。

4

2 に答える 2

3

車輪を再発明する前に、boost::graphを見てください。バンドルされたプロパティを忘れないでください。

于 2011-04-13T19:33:25.183 に答える
2

これをクラスで行っていますか、それとも学習演習として行っていますか? そうでない場合は、ご指摘のとおり、この問題は何度も解決されているためです。そして、さまざまなソリューションに目を通すと、次のような、思いもよらなかった問題があることに気付きます。

  • 有向/無向グラフ
  • ユーザーデータをノードとエッジに関連付ける
  • 疎グラフと密グラフ
  • 大きなグラフと小さなグラフ
  • テンプレートと非テンプレート ベース
  • 他のパッケージへの依存

等々...

最も一般的な実装のいくつかを見てみてください。

https://stackoverflow.com/questions/2751826/which-c-graph-library-should-i-use

于 2011-04-13T19:35:14.443 に答える