非递归 宽度优先遍历图(BFS)

    流程:

    1,利用队列实现

    2,从源节点开始依次按照宽度进队列,然后弹出

    3,每弹出一个点,把该节点所有没有进过队列的邻接点放入队 列

    4,直到队列变空

图的表示和生成见:点击打开链接

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

public class BFS {
	public static void bfs(Node node){
		if(node==null){
			return ;
		}
		System.out.print("bfs:");
		//队列
		Queue<Node>queue = new LinkedList<Node>();
		//set集合,存放节点,判断时候进过队列
		HashSet<Node>set = new HashSet<Node>();
		//将节点加进队列和集合
		queue.add(node);
		set.add(node);
		while(!queue.isEmpty()){
			Node cur = queue.poll();//从队尾弹出一个节点
			System.out.print(cur.value+" ");//具体操作可根据实际情况来定,这里就是打印
			for(Node next:cur.nexts){//迭代器迭代cur的下一节点集合
				if(!set.contains(next)){//没进过队列的才操作
					queue.add(next);
					set.add(next);
				}
			}
		}
		System.out.println();
	}
}

    原文作者:数据结构之图
    原文地址: https://blog.csdn.net/qq_38238041/article/details/79698782
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞