Java 如何在图形中建立反向节点连接?
我有一个有4个节点的图,这些节点与其他节点相连。每个连接都有重量。例如: A->5->B A->3->C B->4->C B->3->D 每个节点都有相应的反向连接。但是我在实现这种反向连接时遇到了一个问题。以下是我现在的算法(大写):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
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(:是的!我用过类似的设计。