第 3-3 课:狼、羊、菜和农夫过河问题

本文详细介绍了狼、羊、菜和农夫过河问题的算法设计思路,包括定义问题的状态、设计搜索算法以及状态树的遍历和剪枝优化。通过穷举法解决此问题,利用状态数据模型和过河动作数据模型,最终找到安全的过河方案。
摘要由CSDN通过智能技术生成

农夫需要把狼、羊、菜和自己运到河对岸去(不知道为啥要运狼,别问我),只有农夫能够划船,而且船比较小,除农夫之外每次只能运一种东西,还有一个棘手的问题,就是如果没有农夫看着,羊会偷吃菜,狼会吃羊。请考虑一种方法,让农夫能够安全地安排这些东西和他自己过河。

算法设计思路

这是一个很简单的问题,在狼、羊和菜这个食物链上,关键是中间的羊,因为狼不吃菜,所以要安全过河,农夫的第一件事就是带羊走,拆开这个食物链。但是计算机无法理解这个关键的羊,所以我们仍然采用穷举法来解决这个问题,同时借助于穷举搜索找出所有过河的方法。

这个题目的解决思路和“三个水桶倒水”问题的解决思路类似,就是对状态进行穷举搜索,从初始状态开始穷举所有的状态变化,直到某一次变化后得到问题解决的最终状态,就输出一个结果。前面的几课中已经多次提到穷举法的两个关键步骤,这里不再列出。接下来就直接从这两个步骤入手,介绍如何设计这个问题的穷举算法。

定义问题的状态

在确定以何种方法对解空间进行穷举搜索之前,首先要定义问题的解。虽然这个题目的要求是给出农夫带着他的小伙伴过河的动作,但是单纯考虑对动作的穷举是没有意义的,因为问题最后的解决状态是农夫、狼、羊和菜过到河对岸,能最终产生

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

吹泡泡的小猫

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

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

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

打赏作者

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

抵扣说明:

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

余额充值