[ACM-Week6] 预备训练
P1135 奇怪的电梯
思路
BFS
代码
1 |
|
两个疑问
- 为什么这里要把移动过后的楼层加入到队列中
Ans
这是广度优先搜索(BFS)的核心部分。当我们访问一个节点(在这个问题中,节点是楼层)时,我们需要将所有未访问过的相邻节点(在这个问题中,相邻节点是可以通过按电梯按钮到达的楼层)加入到队列中。
在这个问题中,我们可以通过按电梯的上下按钮从当前楼层移动到其他楼层。所以,当我们访问一个楼层时,我们需要将通过按电梯按钮能够到达的所有未访问过的楼层加入到队列中。
这样,我们就可以保证先访问的楼层的相邻楼层会比后访问的楼层的相邻楼层先被访问,这就是“广度优先”。同时,我们也可以保证我们访问了所有可以通过按电梯按钮到达的楼层,这样我们就可以找到从起始楼层到目标楼层所需的最少按键次数。
Trick
本例中,pendingFloors 始终只有一个元素,我们可以使用一个int代替它
- 如果我因为去过某一楼层而提前返回,为什么能够保证leastOps中的每一个元素都是最少的次数
Ans
这是 BFS 的特性,由于我们优先考虑尽可能多地遍历相邻节点,第一次访问某一节点时,当前遍历深度一定最浅,也就是本题中的操作数最少。
P1443 马的遍历
思路同上
代码
1 |
|
P3958 奶酪
1 |
|
P1162 填涂颜色
代码
1 |
|
- 标题: [ACM-Week6] 预备训练
- 作者: Caiyi Shyu
- 创建于 : 2023-11-13 10:38:45
- 更新于 : 2024-09-30 18:43:49
- 链接: https://blog.caiyi1.me/2023/11/13/ACM-Week6/
- 版权声明: 本文章采用 CC BY-NC-SA 4.0 进行许可。