2012-04-21 24 views
3

グラフのすべての頂点を表す別のクラス、Vertexクラスを使用するグラフクラスを作成しようとしています。すべての頂点が接続されている他のノードを追跡できるため、2つの頂点間の可能な接続を表すEdgeクラスが必要かどうかはわかりません。しかし、これが正しいかどうかはわかりません。どう思いますか?Javaでのグラフの実装

ありがとうございます。

+0

私たちにいくつかのコードを教えてください:) – paulsm4

+0

Q:これは "宿題"ですか?もしそうなら、そのようにフラグを立ててください。いずれにせよ、これを見てください:http://en.literateprograms.org/Dijkstra%27s_algorithm_%28Java%29 – paulsm4

+0

これは宿題ではありません。私は、エッジクラスを使用して、使用しないでクラスを実装する方法を知っています。 Edgeクラスなしで正しいかどうかを知りたいだけです。 Anwはリンクをありがとう。 – FranXh

答えて

10

Edgeクラスを使用する必要はありません。隣接リストを使用して、の重み付けされていないグラフを正しく表すことができます。重み付きグラフでは、エッジコストを表す方法が必要であるため、Edgeクラスを使用するのが適切です。

class Graph<E> { 
    private List<Vertex<E>> vertices; 

    private static class Vertex<E> { 
     E elem; 
     List<Vertex<E>> neighbors; 
    } 
} 
+0

はい、これは私が考えていたものです。 Edgeクラスをまったく使用せずに他の頂点を追跡する。ありがとうございました!!!! – FranXh

+1

重み付きの有向グラフが必要になるまで、すべてうまくいく。その後、メタデータが必要になりますが、Edgeクラスはさらに優れています。 –

+0

@AndrewFinnell:ありがとう。更新しました。 – blackcompe

2

典型的には、representationは、意図された用途への適合性に基づいて選択される。この単純な例では、GraphPanelはそのモデルとしてList<Edge>を使用しています。