グラフ(データ構造)を使用するアプリケーションを作成する必要がありますが、その表現方法はわかりませんし、ヒントをいくつか教えてください。Javaのグラフ表現
クラスVertexとEdgeを作成する必要がありますか?はいの場合は、その属性は何ですか?
グラフ(データ構造)を使用するアプリケーションを作成する必要がありますが、その表現方法はわかりませんし、ヒントをいくつか教えてください。Javaのグラフ表現
クラスVertexとEdgeを作成する必要がありますか?はいの場合は、その属性は何ですか?
Iはグラフの隣接リストを使用して示唆しています。
最も簡単な方法は、隣接する頂点へのリンクリストArrayList<Vertex>
を含むVertex
クラスを作成することです。これはグラフを表現するのに十分ですが、別のEdge
クラスは必要ありません。
頂点クラスに他のデータ属性を追加できますが、リンクのリストは厳密に必要なものです。
有向枝(一方向リンク)または無向枝(隣接する頂点が互いに向かい合っている)を持つことができます。私の疑問は、私のようなコードを、作る方法です
です。 See here。例えば:
[][]
)を(Javaで:List
を使用)
私は上記のグラフの実装に疑問がありました。無向グラフの場合、addEdge関数を実装すると、同じ関数の両方向にエッジを追加する必要がありますか? – ueg1990
@ ueg1990 - あなたはそうすることができます。それはあなたのデータ構造に依存しますが、確かに双方向ポインタを持つためにいくつかのグラフ検索をスピードアップすることができます。これを行うもう1つの方法は、各無向エッジが、頂点aおよびbがソートされた順番(例えば、頂点IDによってソートされている)である(a、b)として一度格納されるリストである。 – mikera
しかし、無向グラフの場合、aからbへの辺がある場合、定義上、bからaへの辺を追加する必要があります。 – ueg1990