一个人要将狼、羊、菜过河一次只能带一样,他不在时,狼要吃羊,羊要吃菜。怎样才能安全过河?
2种方式:
1、把羊带到河对岸 -> 把狼带到河对岸,再把羊带回来 - 把白菜带到河对岸 - 把羊带到河对岸;
2、把羊带到河对岸 -> 把白菜带到河对岸,再把羊带回来 -把狼带到河对岸 -把羊带到河对岸;
问题分析:
抛开算法,把这个题当成是一个简单的逻辑题的话还是挺好解的,过不了多久你就会发现几个关键的问题:
1、要时刻注意农夫的位置,因为农夫不在地时候狼会吃羊,羊会吃菜;
2、第一步只能把羊带走;
3、最后一步只能是把羊从河对岸带过来;
会发现羊其实是问题的关键,只要保证羊和狼和白菜隔离开来,那么就很容易解这个问题。
扩展资料:
过河问题,其实质就是一种状态的改变,就像这个问题说的,农夫狼羊菜都要从河的这边到对岸去,也就对应了两个状态,一个是没过河的状态,一个是过了河的状态。
所以很自然的联想到了用0和1来表示他们的状态,并且每时每刻,农夫狼羊菜的状态都对应一个特定的状态,比如没过河的状态是0000,四个都没有过河,而过河的状态是1111。这样做的好处是将问题抽象成了计算机能够处理的数据。
当然可以选择暴力穷举法,列出所有可能并找出合理的,这是屡试不爽而且行之有效的方法。但这并不是聪明的做法。如果学习数据结构学习得好的同学,会想到用图的V来描述每一种状态,用E来描述状态之间的对应关系,最后进行图的遍历就能找到答案了
一,带着羊过河,回来接菜
二,带着菜过河,把羊接回来
三,带着狼过河,回来接羊
四,带着羊过河
总之,就是把握一条,不要让两个相邻的挨在一起
希望回答对你有用,请采纳
1、把羊带到河对岸 -> 把狼带到河对岸,再把羊带回来 - 把白菜带到河对岸 - 把羊带到河对岸;
2、把羊带到河对岸 -> 把白菜带到河对岸,再把羊带回来 -把狼带到河对岸 -把羊带到河对岸;
问题分析:
抛开算法,把这个题当成是一个简单的逻辑题的话还是挺好解的,过不了多久你就会发现几个关键的问题:
1、要时刻注意农夫的位置,因为农夫不在地时候狼会吃羊,羊会吃菜;
2、第一步只能把羊带走;
3、最后一步只能是把羊从河对岸带过来;
会发现羊其实是问题的关键,只要保证羊和狼和白菜隔离开来,那么就很容易解这个问题。
扩展资料:
过河问题,其实质就是一种状态的改变,就像这个问题说的,农夫狼羊菜都要从河的这边到对岸去,也就对应了两个状态,一个是没过河的状态,一个是过了河的状态。
所以很自然的联想到了用0和1来表示他们的状态,并且每时每刻,农夫狼羊菜的状态都对应一个特定的状态,比如没过河的状态是0000,四个都没有过河,而过河的状态是1111。这样做的好处是将问题抽象成了计算机能够处理的数据。
当然可以选择暴力穷举法,列出所有可能并找出合理的,这是屡试不爽而且行之有效的方法。但这并不是聪明的做法。如果学习数据结构学习得好的同学,会想到用图的V来描述每一种状态,用E来描述状态之间的对应关系,最后进行图的遍历就能找到答案了