2

他のノードに接続されている 4 つのノードを持つグラフがあります。各接続には重みがあります。例えば:

A -> 5 -> B

A -> 3 -> C

B -> 4 -> C

B -> 3 -> D

各ノードには、対応する後方接続があります。しかし、そのような後方接続の実現には問題があります。これが私が今持っているもののアルゴリズム(言葉で)です:

  1. ノードの作成 (A、B、C、D)
  2. ノード A をノード B に接続する
  3. 接続重みの設定
  4. 他のノードについて 2、3 を繰り返します。

このアルゴリズムに従って、後方接続 (ノード B からノード A) を個別に作成する必要があります。ノードが 100 個以上ある場合は、注意のための試用版になります。

接続の作成中にこれらの後方接続を行う方法は?

以下は Node クラスです。

public class Node {
    private String name;
    private Map<Node, Integer> connections;

    public Node(String name) {
        this.name = name;
        connections = new HashMap<Node, Integer>();
    }

    public void connect(Node node, int weight) {
        connections.put(node, weight);
        //It is expected to make backward connection here
    }
}
4

2 に答える 2

3

このような:

public void connect(Node node, int weight) {
    connections.put(node, weight);
    node.connections.put(this, weight);
}

Nodeはマップのキーとして使用されるため、そのメソッドとメソッドconnectionsをオーバーライドすることを忘れないでください。equalshashCode

于 2012-11-05T11:47:55.140 に答える
2

以下を使用できます。

node.getConnections().put(this, weight);

ただし、デザインの変更をお勧めします。

class Node
{
    String name;
    List<Node> connectedNodes;
}

class Branch
{
    Node a; 
    Node b;
    int weight;
}

// calling part of program
// initizaliztion of fields already done
public void connect(Node node1, Node node2, int weight) 
{
    // checks required:
    // if a branch already exists

    node1.connectedNodes.Add(node2);
    node2.connectedNodes.Add(node1);

    Branch branch = new Branch(node1, node2, weight);
}
于 2012-11-05T11:53:29.950 に答える