CQBZOJ 避开怪兽

该博客讲述了如何解决一个基于网格地图的问题,其中一个人物需要从起点'V'到终点'J',同时避开怪兽'+'。问题要求找到路径上与怪兽的曼哈顿距离最小值的最大值。博主分享了采用二分搜索的方法来解决这个问题,通过标记怪兽周围的曼哈顿距离并使用BFS验证起点和终点的连通性。时间复杂度为O(n²log(2n)),虽然对于全屏怪兽的情况可能效率较低,但鉴于数据规模较小,这种方法是可行的。
摘要由CSDN通过智能技术生成

题目描述
给出一个N行M列的地图,地图形成一个有N*M个格子的矩阵。地图中的空地用’.’表示。其中某些格子有怪兽,用’+’表示。某人要从起点格子’V’走到终点格子’J’,他可以向上、下、左、右四个方向行走。因此,起点和终点之间可以有许多条路径。注意:即使是有怪兽的格子,他也可以走上去。 设路径上某个格子的坐标为(R,C),某个怪兽的坐标为(A,B),那么它们之间的曼哈顿距离定义为:|R-A| + |C-B| 显然,地图上可能有许多怪兽,路径上也可能途经许多格子,每个格子到每个怪兽都可以算出之间的曼哈顿距离。 问整条路径中离怪兽的曼哈顿距离最小值最大为多少?
输入
输入格式: 第1行:2个整数N和M(1 ≤ N, M ≤ 500) 接下来N行,每行M个字符,可能是’.’, ‘+’, ‘V’, ‘J’等. 数据保证仅包含1个’V’ 和1个 ‘J’ ,至少有1个’+’
输出
输出格式: 第1行:1个整数,表示最短曼哈顿距离的最大值
样例输入

输入样例1:
4 4
+…
….
….
V..J

输入样例2
4 5
…..
.+++.
.+.+.
V+.J+

样例输出
输出样例一:
3

输出样例二:
0

一开始yy到了很多方法:
强行求出每个点到最近怪兽的曼哈顿距离,pass
BFS一波,pass
…………

左撞右撞,终于想到了一个正常的解法——二分答案
二分离怪兽的最短曼哈顿距离,将每个怪兽周围曼哈顿距离等于其的,标记一下,用BFS验证起点终点是否联通,来实现放缩

算了一下时间复杂度, O(n

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值