1.5宽度优先搜索

算法理解

从一个点出发,遍历它的所有相邻点,一层一层往下遍历

T1:(30min)

bfs注意起点不一定在左上角,四个方向都要走

T2:(40min)

bfs注意山峰山谷有一个很重要的条件,周围的所有点高度必须大于或小于山峰山谷的高度

T3:(3h+)

比对与每一种情况(x,y,c1,c2任意一位不同的情况,都设为一种情况进行转移),因为瞬移次数一样,他走的步数也是一样的,所以满足被更新过的是更优的
ps:map会占一个log的复杂度,改成数组就好了

T4:(1h)

我打了一个SPFA,因为每一个点需要更新最小值并且可以重复入队(准确来讲T1,T2,他们先遍历到的一定比后遍历到的更优,因为它们所有相邻点点连的边边权都为1),而这道题边权不完全一样,所以先入队的不一定比后入队的更优,我们可以采取优化,使用双端队列(前后都可以进出),将边权是0的加入队首,边权为1的加入队尾,就可以保证被更新过的一定是最优的,所以每一个点最多被加入一次,大大提升了效率

T5:(1h40min)

注意鬼只有2个,所以每次判断合不合法即可,注:鬼先走,所以说男孩女孩上一轮合法的位置这一轮就不合法了,需要多判几次

T6:(40min)

二分答案,若数字大于二分的答案,则视为一堵墙,最后判断是否能走到底部即可

T7:(39min)

暴力判断龙子弹是否能打到即可

T8:(1h)

注意人先走不算时间,小狗后走时间才加1

T9:(2h30min)

可以先将所有与边界相邻点点和一个原点连线,然后各个连通块再与其相邻的联通块连边,从陆地到河流的边边权为1,其余为0
然后在图上跑一边双端队列01bfs,spfa也行,但可能会超时,没试过
注:连通块数量不一定小于N,亲测最大一个是21000

T10:(2h36min)

箱子有三种状态,倒下可以用一个点代表其坐标,转移可以使用打表,注意细节别让bug跑掉
注:请仔细审题!!!最开始的起点可能是两个位置,我tm真服了,调了1个小时后来才想起来遇到不可描述的问题要先读题!!!

posted @ 2024-09-11 14:53  daydreamer_zcxnb  阅读(7)  评论(0编辑  收藏  举报