动态创建对象并运行BFS

时间:2017-11-09 17:30:23

标签: java breadth-first-search

我想修改下面的代码,以便动态地从文件中获取数据并运行BFS。我尝试过循环,但我仍然坚持如何使用匿名对象动态连接节点。

    Node nA=new Node("101");
    Node nB=new Node("102");
    Node nC=new Node("103");
    Node nD=new Node("104");
    Node nE=new Node("105");

    //Create the graph, add nodes, create edges between nodes
    Graph g=new Graph();
    g.addNode(nA);
    g.addNode(nB);
    g.addNode(nC);
    g.addNode(nD);
    g.addNode(nE);

    g.setRootNode(nA);

    g.connectNode(nA,nB);
    g.connectNode(nA,nC);
    g.connectNode(nA,nD);
    g.connectNode(nD,nE);  

将有一个包含连接节点的边缘文件。我的示例代码在

下面
String[] nodes = {"1","2","3","4"};
ArrayList<Node> Nodelist = new ArrayList<Node>();

        //create node objects
        for(String val : nodes) {
            Nodelist.add(new Node(val));
        }

        //create graph nodes from array nodelist 
        Graph g = new Graph();
        for(Node val : Nodelist) {
            g.addNode(val);

        }
         g.setRootNode(Nodelist.get(0));
        //then in loop to create connection between nodes from file in structure [101,102] , [102,103] ...
        for(){
           int[] arr = file.split(",")
           g.connectNode(arr[0],arr[1])
        }

我的问题在于对象名称。我尝试使用匿名对象,然后在addNode()中添加它们但是我将如何创建将使用匿名对象数组从文件中读取的节点的连接。我不要不知道我是否清楚我想要实现的目标。

我如何在HashMap中添加它们但使用相同的键和值数组。我尝试使用arraylist但只保存最后一个值。

1 个答案:

答案 0 :(得分:1)

您缺少的是通过它的值找到节点的方法。您可以通过用地图替换节点列表来获得它,其中节点的值是一个键(假设:每个值都不同)。

Map<String, Node> nodeMap = new HashMap<>();

for (String val: nodes) {
    nodeMap.put(val, new Node(val));
}

稍后连接节点会从nodeMap获取它们的值。