猎人抓兔子的bfs搜索解法

本文介绍了一个智力问题:猎人在五个相邻山洞中寻找每晚换洞的兔子。为解决此问题,作者使用BFS(广度优先搜索)算法来找到确保抓到兔子的最短检查序列。通过代码实现,减少了问题的思考难度。

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

有五个山洞,一字排开,一只兔子住在某个洞,每天晚上会换住到相邻的洞中,一个猎人只能每天上去一个洞,问怎样的检查序列能确保抓到兔子。


这个问题,可以说是一个智力题了,当然我的智力没有达标,所以没有想出来。

所以我打算写一段代码找出一个可以实现的序列,来减少我脑细胞的消耗。

要找出一个序列,当然市越短越好了,所以我运用bfs的搜索方法来记录当天检查的洞,兔子可能的藏身之洞以及之前检查的洞。

代码有注释,我就不bb了。


#coding:utf-8
'''
n为当天晚上要查看的洞
list1为肯能是兔子藏身的洞的集合
set2为当查看n后,没有抓到兔子,兔子可能藏身的集合
'''
def getNewSet(n,list1):
    set2 = set()
    for i in list1:
        if i+1 != n and i+1<=5:
            set2.add(i+1)
        if i-1 != n and i-1>=1:
            set2.add(i-1)
    return  set2

import Queue
if __name__== '__main__':
    '''
    bfs进行搜索,首先将初始情况加入队列,
    1.当队列部不空时:
        2.如果已经得到了结果,那就结束,跳转到(7.)
        3.取出队列的第一个值
        4.分别检查5个洞,
            5.如果检查之后兔子的藏身洞变少,那就将这个洞加入到队列中;
            6.如果检查后兔子没有藏身之处,则已经找到结果
              将结果赋值给ans同时设置已找到结果标志,并跳出循环
    7.输出最后记录的结果
    8.根据得到的结果,找出每一步后兔子藏身之处
    '''
    Q = Queue.Queue()
    # for i in range(1,6):
    Q.put((0,
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值