(二分+区间搜索 )Mountain Walking(poj2110/poj2922)

这篇博客讨论了如何解决POJ2110和POJ2922问题,即农夫约翰和贝西牛寻找回度假小屋的最小高度差路径。通过分析,博主指出普通搜索方法不适用,而采用二分搜索配合宽度优先搜索(BFS)来寻找在给定高度差区间内的可行路径。博主提供了算法思路和参考代码,并强调了在BFS过程中选择性地入队节点的重要性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

题目

农夫约翰和贝西牛已经开始了其中一个“积极”的假期。他们整天都在山里散步,然后在一天结束时,他们厌倦了回到度假小屋。

由于攀爬需要大量能量并且已经疲惫,他们希望使用其最高和最低高度之间的差异最小的路径返回到机舱,无论路径有多长。帮助FJ找到这条易于移动的路径。

山的地图由N×N(2 <= N <= 100)整数高程矩阵给出(0 <=任意高程<= 110)FJ和Bessie当前位于左上角位置(第1行,列) 1)并且舱室位于右下方(第N行,第N列)。它们可以向右,向左,向顶部或向网格底部移动。他们不能在对角线上旅行。
输入
*第1行:单个整数,N

*行2…N + 1:每行包含N个整数,每个整数指定一个正方形的高度。第2行包含网格的第一行(顶部); 第3行包含第二行,依此类推。该行上的第一个数字对应于网格的第一个(左)列,依此类推。
产量
*第1行:一个整数,它是最佳路径上的最小高度差。
样本输入
5
1 1 3 6 8
1 2 2 5 5
4 4 0 3 3
8 0 2 3 4
4 3 0 2 1
样本输出
2

分析与解答

这题根滑雪那到一样,用普通的搜索根本没法写,因为广搜每个节点只访问一次,而这个并不是只找一条路。深搜的话找路径需要记录当前DFS路径上所遇到所有点的高度,有些路径中的某个点高度过高,一看就知道不需要走,但是深搜还是要走,所以时间上浪费

这题利用二分,我们二分的是个高度差,就是说当前高度差处于[low,up]这个区间的范围之中,对于这个区间[lo

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

每天学点

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值