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 个或更多节点,这将是我注意的试验。

在连接创建过程中如何建立这些反向连接?

这是一个节点类:

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 回答