原标题:【跟耿老师学Java】农夫过河问题
农夫过河问题
耿祥义
通过大家熟悉的农夫过河问题,训练怎样用面向对象的方法解决问题,同时学习怎样使用队列来完成存储数据和处理数据(只在线性表的两端处理数据)。
代码链接
(或单击阅读原文):
https://pan.baidu.com/s/1uISU4P8Bq1rdLhQbXU5mPw
提取码: x4in
1.农夫过河问题
农夫携带狼、羊、菜从河东岸河到西岸,桥上限制农夫每次至多只能携带狼、羊、菜中的一种。另外,如果没有农夫看着,羊会吃菜,狼会吃羊,但狼不吃菜。
2. 农夫的过河办法之一
(1)农夫带羊过河(从东岸到西岸)。
(2)农夫返回(从西岸返回东岸)。
(3)农夫带狼过河(从东岸到西岸)。
(4)农夫带羊返回(从西岸到东岸)。
(5)农夫带菜过河(从东岸到西岸)。
(6)农夫返回(从西岸返回东岸)。
(7)农夫带羊过河(从东岸到西岸)。
3.用面向对象程序的设计办法过河
(1)农夫对象负责维护东岸和西岸的数据(作为农夫对象的数据)
(2)农夫每次从东岸到西岸时(对象执行方法),要保证东岸剩余的数据符合要求
(3)农夫每次从西岸到东岸时(对象执行方法),要保证西岸剩余的数据符合要求
(4)农夫发现东岸没有数据后,就不再从东岸到西岸。
4.具体数据
我们用两个链表作为农夫对象所维护的东岸和西岸。用数字1代表菜,2代表羊,3代表狼。将数字1,2,3存入刻画东岸的链表中。当农夫运送数据从东岸到西岸时(删除东岸链表的头节点)&