import java.util.ArrayList;
import java.util.List;
public class Goriver {
public static void main(String[] args) {
List<String> list1 = new ArrayList<String>();
List<String> list2 = new ArrayList<String>();
list1.add("dog");
list1.add("fish");
list1.add("cat");
goRiver(list1,list2);
}
public static void goRiver(List<String> list1,List<String> list2){
while(list2.size()!=3){//list2的长度为三说明过河成功
if(isSafe(list2)==1&&isSafe(list1)==1)//当两岸都安全,moveTo
moveTo(list1,list2);
else if(isSafe(list2)==0)//当过河后不安全,moveBack
moveBack(list1,list2);
else
moveTo(list1,list2);//开始时,moveTo
}
System.out.println("成功过河");
}
/* 从此岸去彼岸 list1---->list2*/
public static void moveTo(List<String> list1,List<String> list2){
String str = list1.get(0);
list1.remove(str);
list2.add(str);
if(isSafe(list1)==0){//如果带走选中的之后,此岸不安全,放回
list1.add(str);
list2.remove(str);
moveTo(list1,list2);//带新的过河
}
else //打印带什么个过河
System.out.println("老农带着"+str+"去对岸");
}
/* 从彼岸回来list2---->list1*/
public static void moveBack(List<String> list1,List<String> list2){
String str = list2.get(0);
list2.remove(str);
list1.add(str);
if(isSafe(list2)==0){//如果带走选中的之后,此岸不安全,放回
list2.add(str);
list1.remove(str);
moveBack(list1,list2);//带新的过河
}
else//打印带什么过河
System.out.println("老农带着"+str+"从对岸回来");
}
public static int isSafe(List<String> list){
if(list.contains("dog")&&list.contains("cat")
|| list.contains("cat")&&list.contains("fish"))//判断条件,岸边不安全
return 0;
else return 1;
}
}
PS:注释写的不是很多很全面,将就看吧。 |