Java 如何在图形中建立反向节点连接?

Java 如何在图形中建立反向节点连接?,java,algorithm,Java,Algorithm,我有一个有4个节点的图,这些节点与其他节点相连。每个连接都有重量。例如: A->5->B A->3->C B->4->C B->3->D 每个节点都有相应的反向连接。但是我在实现这种反向连接时遇到了一个问题。以下是我现在的算法(大写): 创建节点(A、B、C、D) 将节点A连接到节点B 设置连接重量 对其他节点重复2,3 按照这个算法,我必须分别进行反向连接(节点B到节点A)。如果我有100个或更多的节点,这将是一个考验我的注意力 如何在创建连接期间建立这些反向连接 下面是一个节点类: publ

我有一个有4个节点的图,这些节点与其他节点相连。每个连接都有重量。例如:

A->5->B

A->3->C

B->4->C

B->3->D

每个节点都有相应的反向连接。但是我在实现这种反向连接时遇到了一个问题。以下是我现在的算法(大写):

  • 创建节点(A、B、C、D)
  • 将节点A连接到节点B
  • 设置连接重量
  • 对其他节点重复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
        }
    }
    
    公共类节点{
    私有字符串名称;
    私有地图连接;
    公共节点(字符串名称){
    this.name=名称;
    connections=newhashmap();
    }
    公共void连接(节点,整数权重){
    连接。放置(节点、重量);
    //预计将在此处进行反向连接
    }
    }
    
    像这样:

    public void connect(Node node, int weight) {
        connections.put(node, weight);
        node.connections.put(this, weight);
    }
    
    由于
    节点
    用作
    连接
    映射中的键,因此不要忘记覆盖其
    equals
    hashCode
    方法。

    您可以使用:

    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);
    }
    
    类节点
    {
    字符串名;
    列出连接的节点;
    }
    班支部
    {
    节点a;
    节点b;
    整数权重;
    }
    //调用程序的一部分
    //已完成字段初始化
    公共void连接(节点1、节点2、整数权重)
    {
    //所需检查:
    //如果分支已经存在
    node1.connectedNodes.Add(node2);
    node2.connectedNodes.Add(node1);
    分支分支=新分支(节点1、节点2、权重);
    }
    
    看起来像一个神经网络(:你的答案是dasblinkenlight的,但我建议像Azodious那样进行设计更改。@HericDenis,是的,两种变体都不错。但dasblinkenlight的一种最符合我的需要。我需要最小生成树搜索(Prim算法)期间的连接信息.Nice@Dragon,祝你好运!我不知道这个算法,我不是计算机科学家,我是电气工程师,这就是为什么我认为这是一个NN。@HericDenis,无论如何,神经网络是这个节点类重用的好例子:)也许将来我会用它来创建NN(:是的!我用过类似的设计。