2011-12-07 5 views
2

私はn個のノードの座標とm個の無向エッジを持つグラフを扱っていますが、直線ではなく破線を使用して、より良いビジュアルグラフを得る方法を教えてください。折れ線の少ないグラフを描くにはどうすればいいですか?

私は交差点の数を最小限に抑えることがNPの問題であることを知っています。だから私はちょうど誰かが私にそれについてのいくつかのリソースを与えるかもしれないと思うbeacuseここでいくつかの助けを求める。

さらに、いくつかのノードの座標を変更することは大丈夫だと思います。私たちの目にとってより鮮明なグラフを見つける方法は問題です。

答えて

-1

GraphViz websiteは、グラフの視覚化について学ぶのに適しています。

0

Boost graph library(すなわちBGL)には、実験するためのアルゴリズムとデータ構造が豊富で、デュアルインターフェイス(もちろんC++やPython)もあります。もちろん、Boostは始めるのが一番簡単な方法ではありません。確かにGraphviz(それはBGLがインターフェイスできる)は簡単です。

BGL docsであなたが有用見つけることができる多くのリソースがある:例えば、前リンクから:

任意の平面図は、面と呼ばれるグラフのエッジによって境界異なる領域に平面を分離します。簡単な例として、三角形を平面に埋め込むと、三角形の内側の領域と三角形の外側の(制限のない)領域の2つの面に分割されます。グラフの埋め込みの外側にある無限の領域は、外面と呼ばれます。すべての埋め込みによって、1つの外面と0つ以上の内面が生成されます。オイラーの公式と呼ばれる有名な結果は、n個の頂点、例えばエッジ、F面、およびC連結成分を有する任意の平面グラフの、

N + F = E + C + 1

この式は、その任意の平面を意味することを述べてセルフループまたはパラレルエッジのないグラフは、最大で3n-6のエッジと2n-4のフェースを持ちます。これらの境界のために、平面グラフ上のアルゴリズムは、n個の頂点グラフ上の時間O(n)または空間O(n)内で、グラフのすべてのエッジまたは面を横断しなければならない場合でも実行できます。

平面グラフを入力として受け入れるアルゴリズムから実際の平面性テストを分離する便利な方法は、平面埋め込みと呼ばれる中間構造を使用する方法です。プレーン描画のように平面内の頂点と辺の絶対位置を指定する代わりに、プレーン埋め込みは互いの相対位置を指定します。平面埋め込みは、グラフの各頂点について、それらの頂点の周りに描画される順番でその頂点に入射するすべての辺のシーケンスからなる。このシーケンスで定義された順序は、各頂点の近傍を通る時計回りまたは反時計回りの反復を表すことができますが、向きは埋め込み全体にわたって一貫していなければなりません。

Boost Graph Libraryでは、平面埋め込みはPlanarEmbeddingコンセプトのモデルです。 PlanarEmbeddingをモデル化するタイプは、平面性テストに渡すことができ、入力グラフが平面であれば入力することができます。他のすべての「バックエンド」平面グラフアルゴリズムは、この入力されたPlanarEmbeddingを入力として受け入れます。 '

関連する問題