4.抓牛 农夫知道一头牛的位置,想要抓住它。农夫和牛都位于数轴上,农夫起始位于点N(0<=N<=100000),牛位于点K(0<=K<=100000)。农夫有两种移动方式: 1、从X移动到X-1或X+1,每次移动花费一分钟 2、从X移动到2*X,每次移动花费一分钟 假设牛没有意识到农夫的行动,站在原地不动。农夫最少要花多少时间才能抓住牛? 时间限制:2000 内存限制:65536 输入 两个整数,N和K 输出 一个整数,农夫抓到牛所要花费的最小分钟数 样例输入 5 17 样例输出 4
【喵呜刷题小喵解析】这道编程题要求找到农夫抓住牛所需的最小时间。农夫有两种移动方式:移动到当前位置的相邻位置(左或右)或移动到当前位置的两倍。牛不会移动,农夫需要从位置N移动到位置K来抓住牛。首先,我们可以观察到,如果N大于或等于K,那么农夫只需要移动到K的位置就可以抓住牛,所需时间就是N和K之间的差值。如果N小于K,我们需要使用广度优先搜索(BFS)来找到最短路径。我们从位置N开始,尝试所有可能的移动方式,直到我们到达位置K或者尝试了所有可能的位置。在BFS中,我们使用一个队列来保存待探索的位置和当前的步数。我们还使用一个集合来保存已经访问过的位置,以避免重复探索。最后,我们调用函数catch_cow,输入N和K,并打印出结果。如果N大于或等于K,函数将返回N和K之间的差值;否则,它将返回通过BFS找到的最短路径的步数。