解决的问题
要解决的问题,大体是在一副“图”中,找到从起点start
到 终点target
的最近距离。
例如: 走迷宫问题、 二叉树的最小高度问题、解开密码锁的最少次数
算法框架
代码语言:javascript复制int BFS(Node* start, Node* target) {
Queue<Node*> q; // 核心的数据结构
Set<Node*> visited; // 存储已走过的路,避免走回头路
q.offer(start); // 将起点加入队列
visited.add(start);
int step = 0; // 记录扩散的步数
while(!q.empty()) {
int size = q.size();
/* 将当前队列中的节点向四周扩散 */
for (int i = 0; i < size; i ) {
Node cur = q.front();
q.pop();
`// 重点 : 判断是否到达终点 `
if(cur == target)
return strp;
for(Node next : cur) {
if (next not in visited) {
q.offer(next);
visited.add(next);
}
}
`// 重点 : 更新步数 `
step ;
}
}