- package com.itheima;
- import java.util.LinkedList;
- /*
- * 需求: 10、一位老农带着猫、狗、鱼过河,河边有一条船,每次老农只能带一只动物过河。
- * 当老农不和猫狗鱼在一起时,狗会咬猫,猫会吃鱼,当老农和猫狗鱼在一起时,则不会发生这种问题。编程解决猫狗鱼过河问题。
- */
- public class Test10 {
- public static void main(String[] args) {
- // 定义两个LinkedList集合,用于表示此岸和彼岸
- LinkedList<String> ciAn = new LinkedList<String>();
- LinkedList<String> biAn = new LinkedList<String>();
- // 初始时,此岸具有cat、dog、fish、person
- ciAn.add("cat");
- ciAn.add("dog");
- ciAn.add("fish");
- ciAn.add("person");
- while (true) {
- // 当此岸没有任何动物,就说明过河成功了,跳出循环
- if (ciAn.size() == 0) {
- break;
- }
- // 过河
- if (ciAn.contains("person")) {// peron在此案的情况
- ciAn.remove("person");
- String animal = ciAn.removeFirst();
- biAn.addLast(animal);
- biAn.addLast("person");
- boolean flag = isDaJia(ciAn, biAn);
- if (flag) {
- // 如果打架
- biAn.remove("person");
- biAn.remove(animal);
- ciAn.addLast(animal);
- ciAn.addLast("person");
- } else {
- // 否则
- System.out.println("person将" + animal + "带过河");
- }
- } else {// person在彼岸的情况
- // person自己先回去
- biAn.remove("person");
- ciAn.addLast("person");
- boolean flag = isDaJia(ciAn, biAn);
- if (flag) {
- while (true) {
- // 如果打架,就带走一个动物
- String animal = biAn.removeFirst();
- ciAn.add(animal);
- if (isDaJia(ciAn, biAn)) {
- // 如果还是打架,那个动物就回来
- ciAn.remove(animal);
- biAn.addLast(animal);
- } else {
- System.out.println("person将" + animal + "带回来");
- break;
- }
- }
- } else {
- // 不打架
- System.out.println("person自己回来");
- }
- }
- }
- System.out.println("过河成功!");
- }
- // 判断河两岸是否有"打架"行为
- public static boolean isDaJia(LinkedList<String> ciAn,
- LinkedList<String> biAn) {
- if (!ciAn.contains("person")) {
- if (ciAn.contains("cat")
- && (ciAn.contains("fish") || ciAn.contains("dog"))) {
- return true;
- }
- }
- if (!biAn.contains("person")) {
- if (biAn.contains("cat")
- && (biAn.contains("fish") || biAn.contains("dog"))) {
- return true;
- }
- }
- return false;
- }
- }
复制代码
|