一个人要将狼、羊、菜过河一次只能带一样,他不在时,狼要吃羊,羊要吃菜。怎样才能安全过河?

一个人要将狼、羊、菜过河一次只能带一样,他不在时,狼要吃羊,羊要吃菜。怎样才能安全过河?,第1张

2种方式:

1、把羊带到河对岸 -> 把狼带到河对岸,再把羊带回来 - 把白菜带到河对岸 - 把羊带到河对岸;

2、把羊带到河对岸 -> 把白菜带到河对岸,再把羊带回来 -把狼带到河对岸 -把羊带到河对岸;

问题分析:

抛开算法,把这个题当成是一个简单的逻辑题的话还是挺好解的,过不了多久你就会发现几个关键的问题:

1、要时刻注意农夫的位置,因为农夫不在地时候狼会吃羊,羊会吃菜;

2、第一步只能把羊带走;

3、最后一步只能是把羊从河对岸带过来;

会发现羊其实是问题的关键,只要保证羊和狼和白菜隔离开来,那么就很容易解这个问题。

扩展资料:

过河问题,其实质就是一种状态的改变,就像这个问题说的,农夫狼羊菜都要从河的这边到对岸去,也就对应了两个状态,一个是没过河的状态,一个是过了河的状态。

所以很自然的联想到了用0和1来表示他们的状态,并且每时每刻,农夫狼羊菜的状态都对应一个特定的状态,比如没过河的状态是0000,四个都没有过河,而过河的状态是1111。这样做的好处是将问题抽象成了计算机能够处理的数据。

当然可以选择暴力穷举法,列出所有可能并找出合理的,这是屡试不爽而且行之有效的方法。但这并不是聪明的做法。如果学习数据结构学习得好的同学,会想到用图的V来描述每一种状态,用E来描述状态之间的对应关系,最后进行图的遍历就能找到答案了

模型假设
先假设农夫带狼过去,但是留下的羊和菜,羊吃菜,所以这种方法不行
假设农夫带羊过去,留下狼和菜,这样没问题
再假设农夫带菜过去,留下狼和羊,不行
所以只有第二种假设是正确的
农夫带羊过去后,回来带上狼,留下菜,再回到对面,这时候农夫单独回来是行不通的,因为不能把狼和羊放一起,所以把羊带上回去取菜,再把羊放下,菜带上,这样就是一边狼和菜,一边羊,木有问题,最后把羊带回来就可以了


欢迎分享,转载请注明来源:内存溢出

原文地址: https://www.outofmemory.cn/dianzi/10840400.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-11
下一篇 2023-05-11

发表评论

登录后才能评论

评论列表(0条)

保存