每日总结2021.4.28

本文探讨了如何利用多源BFS解决两类火烧迷宫问题。第一题中,需要找到最短时间烧完所有草坪,通过双起点BFS策略实现。第二题涉及一个人在迷宫中逃生,同时火在蔓延,需要计算安全逃脱的最短时间。关键在于理解和应用多源BFS,以及处理动态变化的限制条件。在实际解题过程中,要注意细节如限制条件的初始化,以避免错误。
摘要由CSDN通过智能技术生成

1.FZU - 2150 大意:给定一个n*m的草地,每个格子上‘#’表示草坪,‘.’表示空地,开始选两块草坪放火(两块草坪可以是一个位置),每过一分钟火向四周蔓延一个单位(上下左右四个方向)当然遇到空地火就不能蔓延了,问把全部草坪烧掉的最短时间,如果没办法烧完输出-1。

思路:双起点bfs,也就是多源bfs,刚开始看到这道题并没什么思路,原因还是在于对多源bfs理解不够透彻。然后去复习了下多源bfs,才看出这道题就是考的多源bfs。先来想想多源bfs:其实多源bfs和bfs的区别就仅仅是多源bfs在起始的时候加入多个起点。最后求出的从其中任意一个起点扩展到终点的所有方案中的最小值。为什么直接扩展就行了呢?首先基于bfs的特点:一层一层扩展,每次权重都是一样,每次扩展放到队尾,因此在队列里总是单调不降的,所以每次扩展都是以最优的一种方式扩展,我们不去考虑他是哪个起点扩展到的,只关注他是合法的,而且是最优的就行了。这就是多源bfs的本质以及正确性。知道了可以本题的本质是多源bfs之后就很简单了,暴力枚举,把所有的草坪先记录下来,然后每次选两个,求出最小的一种就行了。

总结:关键是对多源bfs的理解:多源bfs就是在普通bfs的基础上加入多个起点。

2.UVA - 11624 大意:又是火烧迷宫。。。,给定一个n行m列的迷宫,“#”代表墙,火和人都不能走 “.”代表空地火和人能走的,“J”代表人,“F”代表火,(有且只有一个“J”)人每分钟向四周走一个单位,走到边缘的".",且没遇到火认为能安全逃脱,当然从边缘离开迷宫也得加1,火每分钟向四周蔓延一个单位,(四周是指上下左右),求人能安全离开迷宫的最短时间,如果不能安全逃脱输出“IMPOSSIBLE”。

思路:这题思路还是很好想的,和之前做过的洛谷上的流星差不多,先求出火蔓延到某个位置时的最短时间作为人逃脱时的限制条件,(此题有个坑点就是不一定只有一堆火,再次体现出读题的重要性。)多堆火也就是多源bfs,没问题。人逃脱,简单的最短路走迷宫问题,只不过加了些限制条件,有些点不能走而已,也没问题。写好了,信心满满的交了。wa了。小细节limit限制条件初始化为inf而不是0,初始化位0的话会多出很多“可以限制的”点,到此完结。

总结:走迷宫时遇到会变化的阻碍,可以开一个数组,先根据阻碍的变化提前纪录每个点的限制条件,在正式搜索的时候根据限制条件判断某个点到底能不能走。注意限制数组的初始化,确保阻碍没影响到的点对正式搜索没有影响。

今天先写这么多,害,回去要写实验报告。。。。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值