5

Javaでリストを2次元として処理する方法はありますか?

状況: ノード、エッジ、およびエッジごとの重みを含むグラフがあります。ここで、各ノードを格納するためのデータ構造が必要です: a) その隣接ノード b) 各隣接ノードのエッジの重み

最初に、識別子と、近隣識別子とエッジの重みを格納するための 2 次元配列のようなものを使用して、新しいクラス「ノード」を作成することを考えました。ただし、各ノードの近隣ノードの数は指定されておらず、実行時に動的に増加する可能性があります。したがって、2次元配列はここに行く方法ではないと思います。

クラス「ノード」に次のようなリストを含めることができると思いました。

List<node> neighbours = new ArrayList<node>();

しかし明らかに、これは隣接ノードのみを処理し、エッジの重みは処理しません。

すべてのノードについて、近隣の識別子と対応するエッジの重みが格納されているような「グラフ」を作成する方法のヒントはありますか?

読んでくれてありがとう :-)

4

3 に答える 3

4

最も簡単なのは、次を使用することHashMapです。

    class Edge {
// represents edge with destination node and it's weight
        private final Node node;
        private final int weight;

        Edge(Node node, int weight) {
            this.node = node;
            this.weight = weight;
        }

    }

// represents map which holds all outgoing edges keyed by source nodes.
    Map<Node, Set<Edges>> edgesByOutgoingNodes = new HashMap<Node, Set<Edges>>();
于 2012-10-05T10:38:17.143 に答える
0

GuavaのTableインターフェースは役に立つかもしれません。私はそれを使ったことがありませんが、それは良いと聞きました。このcreateメソッドは役立つ場合があります

于 2012-10-05T10:41:51.417 に答える
0

次のようなことができます。

List<Connection> connections = new ArrayList<Connection>();

「接続」は次のように定義されています。

Class Connection {
    private int weight;
    private Node node;

    .... add getters/setters here ....
} 
于 2012-10-05T10:38:49.373 に答える