流程:
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();
}
}