17.2:宽度优先遍历

宽度优先遍历

在这里插入图片描述

使用 HashSet 的目的就是为了防止直接邻居的重复进入导致进入死循环。
在这里插入图片描述

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 + " ");
        }
    }
}

猜你喜欢

转载自blog.csdn.net/SCR1209/article/details/131024201