如果要解题的话,思路应该是用 list集合去解,考的不是多线程
- import java.util.ArrayList;
- public class Test10crossriver {
-
- public static void main(String[] args)
- {
- new Test10crossriver().tohere();
- }
- //创建一个集合,代表起始点.
- ArrayList<String> here = new ArrayList<String>();
- //创建一个集合,代表终点.
- ArrayList<String> there = new ArrayList<String>();
- //添加元素.
- public Test10crossriver()
- {
- here.add("Dog");
- here.add("cat");
- here.add("fish");
- }
- //定义一个方法,用来判断这三个动物之间关系.
- public boolean isSafe(ArrayList<String> al)
- {
- if (al.contains("dog") && al.contains("cat")|| al.contains("cat") && al.contains("fish"))
- {
- return false;
- }
- return true;
- }
- //定义一个方法,将起点的元素送到终点.
- public void tohere() {
- String str = here.get(0);
- here.remove(str);
- if (isSafe(here)) {
- System.out.println("1农夫带着" + str + "去往对岸,这边还剩下" + here + ",对岸有" + there);
- toThere(str);
- } else {
- here.add(str);
- tohere();
- }
- }
- //定义一个方法,用来查看终点的元素.
- public void toThere(String s) {
- there.add(s);
- //如果here没有元素,表示已经成功并结束程序
- if(here.isEmpty()){
- System.out.println("4农夫,"+there+"都被你带过来了");
- return;
- }
- //如果对岸安全,则农夫独自回到本岸,否则带上集合中第一个动物回到本岸
- if(isSafe(there)){
- System.out.println("2农夫回到原点,对岸有" + there);
- tohere();
- }else{
- String temp=there.get(0);
- there.remove(temp);
- System.out.println("3农夫带着"+temp+"回到原点,这边有" + here + ",对岸有" + there);
- here.add(temp);
- tohere();
- }
- }
- }
复制代码 |