2种方式:
1、把羊带到河对岸 -> 把狼带到河对岸,再把羊带回来 - 把白菜带到河对岸 - 把羊带到河对岸;
2、把羊带到河对岸 -> 把白菜带到河对岸,再把羊带回来 -把狼带到河对岸 -把羊带到河对岸;
问题分析:
抛开算法,把这个题当成是一个简单的逻辑题的话还是挺好解的,过不了多久你就会发现几个关键的问题:
1、要时刻注意农夫的位置,因为农夫不在地时候狼会吃羊,羊会吃菜;
2、第一步只能把羊带走;
3、最后一步只能是把羊从河对岸带过来;
会发现羊其实是问题的关键,只要保证羊和狼和白菜隔离开来,那么就很容易解这个问题。
扩展资料:
过河问题,其实质就是一种状态的改变,就像这个问题说的,农夫狼羊菜都要从河的这边到对岸去,也就对应了两个状态,一个是没过河的状态,一个是过了河的状态。
所以很自然的联想到了用0和1来表示他们的状态,并且每时每刻,农夫狼羊菜的状态都对应一个特定的状态,比如没过河的状态是0000,四个都没有过河,而过河的状态是1111。这样做的好处是将问题抽象成了计算机能够处理的数据。
当然可以选择暴力穷举法,列出所有可能并找出合理的,这是屡试不爽而且行之有效的方法。但这并不是聪明的做法。如果学习数据结构学习得好的同学,会想到用图的V来描述每一种状态,用E来描述状态之间的对应关系,最后进行图的遍历就能找到答案了
模型假设先假设农夫带狼过去,但是留下的羊和菜,羊吃菜,所以这种方法不行
假设农夫带羊过去,留下狼和菜,这样没问题
再假设农夫带菜过去,留下狼和羊,不行
所以只有第二种假设是正确的
农夫带羊过去后,回来带上狼,留下菜,再回到对面,这时候农夫单独回来是行不通的,因为不能把狼和羊放一起,所以把羊带上回去取菜,再把羊放下,菜带上,这样就是一边狼和菜,一边羊,木有问题,最后把羊带回来就可以了
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)