17.2: Breadth-first traversal

breadth first traversal

insert image description here

The purpose of using HashSet is to prevent repeated entry of direct neighbors from entering an infinite loop.
insert image description here

package algorithmbasic.class17;

import java.util.HashSet;
import java.util.LinkedList;
import java.util.Queue;

//图的宽度优先遍历
public class BFS {
    
    
    //只要进行宽度优先遍历就要指定一个开始节点。
    //-> 从哪个节点开始进行宽度优先遍历。
    //注意这里的节点是图类型的节点。
    public static void bfs(Node start) {
    
    
        //创建一个set目的是为了防止多个直接邻居进入队列从而导致循环无法结束。
        HashSet<Node> set = new HashSet<>();
        //进行宽度优先遍历的必备神器。
        Queue<Node> queue = new LinkedList<>();

        //放的时候一起放。
        queue.add(start);
        set.add(start);
        while (!queue.isEmpty()) {
    
    
            Node cur = queue.poll();
            //将当前节点的直接邻居放入队列中。
            for (int i = 0; i < cur.nexts.size(); i++) {
    
    
                //如果set中存在说明之前进入过,就不用再进了。
                if (!set.contains(cur.nexts.get(i))) {
    
    
                    queue.add(cur.nexts.get(i));
                    set.add(cur.nexts.get(i));
                }
            }
            System.out.print(cur.value + " ");
        }
    }
}

Guess you like

Origin blog.csdn.net/SCR1209/article/details/131024201