Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/392.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使用Java实现图形的广度优先搜索?_Java_Graph_Linked List_Hashmap_Breadth First Search - Fatal编程技术网

如何使用Java实现图形的广度优先搜索?

如何使用Java实现图形的广度优先搜索?,java,graph,linked-list,hashmap,breadth-first-search,Java,Graph,Linked List,Hashmap,Breadth First Search,我需要使用一个文本文件来完成这项工作,其中包含一个图表的链接列表, (AEDB), (EA), (DA), (美国银行), (CB), 然后我要求用户从开始创建节点,然后打印BFS订单? 我知道一种开始的方法是创建一个链表,然后将链表散列到字典中,但我不知道从那以后,一个节点不能被访问多次。我的链表是这样的, HashMap>L=新HashMap>() LinkedList listA=新建LinkedList(); 列表a.添加(“B”); 列表a.添加(“E”); L.put(“A”,lis

我需要使用一个文本文件来完成这项工作,其中包含一个图表的链接列表, (AEDB), (EA), (DA), (美国银行), (CB), 然后我要求用户从开始创建节点,然后打印BFS订单? 我知道一种开始的方法是创建一个链表,然后将链表散列到字典中,但我不知道从那以后,一个节点不能被访问多次。我的链表是这样的, HashMap>L=新HashMap>()

LinkedList listA=新建LinkedList();
列表a.添加(“B”);
列表a.添加(“E”);
L.put(“A”,listA);
LinkedList listB=新建LinkedList();
清单B.添加(“A”);
清单B.添加(“C”);
清单B.添加(“F”);
L.put(“B”,列表B);
LinkedList listE=新建LinkedList();
列表。添加(“A”);
列表。添加(“F”);
L.put(“E”,listE);
LinkedList listF=新建LinkedList();
列表F.添加(“E”);
列表F.添加(“K”);
列表F.添加(“B”);
L.put(“F”,listF);
LinkedList listK=新建LinkedList();
列表k.添加(“F”);
列表k.添加(“C”);
L.put(“K”,listK);
LinkedList listC=新建LinkedList();
列表c.添加(“K”);
列表C.添加(“B”);
L.put(“C”,列表C);

输出将从用户输入的节点开始按广度优先顺序打印节点,但这是我所得到的,您在这里使用的称为

这里是BFS的一个实现,它使用了一个
邻接列表
,就像您上面提到的那样,并执行BFS。它在BFS遍历中打印访问的顶点

public static void BFS(HashMap<String, LinkedList<String>> adjLst, String start) {
    Queue<String> queue = new ArrayDeque<>();
    HashSet<String> seen = new HashSet<>();
    queue.add(start);
    while(0 != queue.size()){
        String vertex = queue.poll();
        if(!seen.contains(vertex)){
            System.out.print(vertex + " ");
            queue.addAll(adjLst.get(vertex)); // Add all neighbors of 'vertex' to the queue
            seen.add(vertex);
        }
    }
}
publicstaticvoidbfs(HashMap adjLst,stringstart){
Queue Queue=new ArrayDeque();
HashSet seen=新的HashSet();
queue.add(开始);
而(0!=queue.size()){
字符串顶点=queue.poll();
如果(!seen.contains(顶点)){
系统输出打印(顶点+“”);
queue.addAll(adjLst.get(vertex));//将“vertex”的所有邻居添加到队列中
添加(顶点);
}
}
}

我已经创建了一个节点的链接列表。您需要从文件中读取吗?你能一次读取所有文件并像类一样存储在数据结构中吗?为什么有多个文件?@SkullFace发布你的代码!告诉我们你期望的产出和你得到的。
public static void BFS(HashMap<String, LinkedList<String>> adjLst, String start) {
    Queue<String> queue = new ArrayDeque<>();
    HashSet<String> seen = new HashSet<>();
    queue.add(start);
    while(0 != queue.size()){
        String vertex = queue.poll();
        if(!seen.contains(vertex)){
            System.out.print(vertex + " ");
            queue.addAll(adjLst.get(vertex)); // Add all neighbors of 'vertex' to the queue
            seen.add(vertex);
        }
    }
}