POJ 3278 Catch That Cow

这是一道关于使用宽度优先搜索(BFS)解决经典问题的算法题。题目描述农夫追捕位于数轴上的固定位置的牛,农夫可以向左或向右步行一格,或者直接跳跃到当前位置的两倍。要求求出农夫到达牛的位置所需的最短时间。如果农夫初始位置在牛的右侧,不需要BFS,直接计算步数即可。题目的解决方案是通过BFS遍历所有可能的移动路径,并记录每个位置到达的时间,直到找到牛的位置。

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

经典BFS,水题。题意:农夫抓牛。输入两个整数,分别代表农夫的位置和牛的位置。牛是不会动的。农夫可以向左走一格或向右走一格,也可以走当前格数x2。每行动一次用掉1分钟,求农夫走到牛的位置所花的最短时间。

比如:输入5和17。

农夫先选择第二种走法,从5→10,耗时1分钟。

接下来向左走一格10→9,耗时1分钟。

接下来再次第二种走法,从9→18,耗时1分钟。

接下来向左走一格,从18→17.耗时1分钟。这时农夫已经走到了牛的位置,抓到了牛。总耗时4分钟。

思路:建一个step数组,记录走到某一格上农夫的耗时。建立一个vis数组,记录该点是否已访问。接下来从起始点BFS三种走法,即向左走一格,向右走一格,和格数x2的走法.每走一格,目标格子step为当前step+1;当走到牛的位置时输出对应牛的位置的step就可以了。要注意的是,如果输入的第一个数大于第二个数,即农夫处于牛的右边,那么农夫就只能靠向左一格一格走的方式去抓牛了,那么并不需要进行bfs,直接输出x-y就好了。

Catch That Cow
Time Limit: 2000MS   Memory Limit: 65536K
Total Submissions: 60229  
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值