最少多少步才能逮住兔子

1问题描述

有n个水平并排相邻的洞穴,从左到右依次编号1,2,...,n。某个洞穴中有一只兔子,该兔子每天晚上都会跳到相邻的洞穴中,有个农夫每天晚上会去一个洞穴逮兔子,请问该农夫至少要花多少天(或查看多少次洞穴)才能一定逮住该兔子?

2最优方案

农夫查看洞穴的编号依次为:2,3,...,n-3,n-2, n-2,n-3,...,3,2,一共查看了2(n-1)次,采用该方案一定能逮住兔子。

3方案解析

由于开始兔子的位置未知,原问题等价于:刚开始每个洞穴中有且仅有一只兔子,它们彼此互不干扰对方活动,洞穴足够大,可以容纳无穷只兔子,请问该农夫至少要花多少天(或查看多少次洞穴)才能逮住所有兔子?(若一个洞穴中有多只兔子,该农夫一次逮住该洞穴内的所有兔子)

刚开始,将奇数编号洞穴内的兔子染成红色,将偶数编号洞穴内的兔子染成绿色。如下,箭头表示农夫搜索位置。

img

下面不加证明地给出几个真命题:

  • 无论什么时候,所有红毛兔子所在洞穴编号奇偶性一致,所有绿毛兔子所在洞穴编号奇偶性一致,且与红毛兔子的奇偶性相反;
  • 无论什么时候,每个洞穴要么没有兔子,要么全是红毛兔子,要么全是绿毛兔子,不可能出现红毛兔子和绿毛兔子混在一个洞穴中的情况;
  • 不可能存在两只红毛兔子相邻,也不可能存在两只绿毛兔子相邻;
  • 每个红毛兔子想要越过其左边(或右边)的红毛兔子,必定会在某一洞穴内相遇;每个绿毛兔子想要越过其左边(或右边)的绿毛兔子,必定会在某一洞穴内相遇

当农夫从2号到n-1号洞穴扫描时,由于其行为是在兔子的行为(每次只能向相邻位置跑,在同一位置不能连续待两天)基础上,加上约束:只能向右跑,所以此时可以将农夫看成一只绿毛兔子,即农夫在向右扫描的过程中,要么遇到的洞穴为空,要么会逮住绿毛兔子;刚开始,所有绿毛兔子都在农夫右边,它们想要越过农夫,必定会在某个洞穴内相遇,即被逮住,所以当农夫扫描到第n-1个洞穴时,所有绿毛兔子都被逮住了。

当农夫从n-1号到2号洞穴扫描时,由于他在n-1处连续待了两天,其所在洞穴编号的奇偶性不再与绿毛兔子一致,反而与红毛兔子一致,因此此时可将农夫看成一只红毛兔子。所有红毛兔子都在农夫左边,同上分析,可得:当农夫扫描到2号洞穴时,所有红毛兔子都会被逮住。

综上所述:当农夫按照2,3,...,n-3,n-2, n-2,n-3,...,3,2的顺序搜索洞穴,一定会逮住所有兔子,由此可得,无论兔子初始在什么位置,农夫按照此路线一定能逮住这只兔子。

​ 声明:本文转自最少多少步才能逮住兔子

posted @   little_fat_sheep  阅读(54)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 上周热点回顾(2.24-3.2)
点击右上角即可分享
微信分享提示