Day 2:队列的应用(BFS 入门)
一、什么是队列(Queue)?
队列(Queue)是一种 先进先出(FIFO, First In First Out) 的数据结构,类似于排队买票,先来的人先买到票,后来的排在队尾。队列的两个基本操作:
- 入队(enqueue):元素添加到队列尾部。
- 出队(dequeue):元素从队列头部移除。
核心操作:
offer(e):元素入队(队尾)。
poll():出队(队首)。
peek():查看队首元素(不出队)。
isEmpty():判断队列是否为空。
在 Java 中,Queue 主要可以使用 LinkedList 或 ArrayDeque 来实现:
import java.util.LinkedList;
import java.util.Queue;
public class QueueExample {
public static void main(String[] args) {
Queue<Integer> queue = new LinkedList<>();
queue.offer(1); // 入队
queue.offer(2);
queue.offer(3);
System.out.println(queue.poll()); // 出队,输出 1
System.out.println(queue.peek()); // 查看队首元素,输出 2
}
}
二、广度优先搜索(BFS, Breadth-First Search)
1. 什么是 BFS?
广度优先搜索(BFS)是一种用于 图遍历 和 最短路径搜索 的算法。它的工作方式类似于 逐层扩展,先访问起点的所有邻居,再访问邻居的邻居,依次进行。
BFS 适用于: ✅ 求解最短路径(迷宫、最短跳数)
✅ 求解连通性问题(岛屿问题、社交网络关系)
✅ 状态搜索(八数码问题、滑动拼图)
2. BFS 的基本原理
- 使用队列(Queue)
- 从起点开始,将其加入队列