import org.w3c.dom.Node;
import java.util.ArrayDeque;
import java.util.HashMap;
import java.util.Queue;
/**
*
* 最简洁的BFS算法的通用模版
*
* @author
* @Date 2023/5/14 14:40
*/
public class BFS {
// java 队列建议使用 ArrayDeque 不建议使用 new LinkedList 链表比数组慢
Queue<Node> queue = new ArrayDeque<>();
HashMap<Node,Integer> distance = new HashMap<>();
// step 1 : 初始化
// 把初始节点放到queue里,如果有多个就都放进去
// 并标记初始节点的距离为0, 记录在distance 的 hashmap里
// distance 有两个作用 一是判断是否已经访问过 二是记录离起点的距离
queue.offer(node);
distance.put(node,0);
// step 2: 不断访问队列
// while 循环 + 每次 pop 队列中的一个点出来
while( !queue.isEmpty()){
Node node = queue.poll();
// step 3 : 拓展相邻节点
// pop 出的节点的相邻节点, 加入队列并在 distance中存储距离
for(Node neighbor : node.getNeighbors()){
if(distance.containsKey(neighbor)){
continue;;
}
distance.put(neighbor,distance.get(node)+1);
queue.offer(neighbor);
}
}
}
02-23
262
08-22
353