用java简单实现农夫、狼、羊和菜过河的问题
题目描述:
有一个农夫带一只羊、一筐菜和一只狼过河,
如果没有农夫看管,则狼要吃羊,羊要吃菜,
但是船很小,只够农夫带一样东西过河。
问农夫该如何解此难题?
代码如下:
package Demo;
import java.util.ArrayList;
import java.util.List;
public class CrossRiver {
List<String> listThis = new ArrayList<String>();
List<String> listThat = new ArrayList<String>();
public CrossRiver() {
listThis.add("狼");
listThis.add("草");
listThis.add("羊");
}
public boolean isSafe(List< String > list){
if(list.contains("狼")&&list.contains("羊")||list.contains("羊")&&list.contains("草")){
return false;
}else{
return true;
}
}
public void thisTothat(){
String str = listThis.get(0);
listThis.remove(str);
if(this.isSafe(listThis)){
System.out.println("农夫带着 " + str + " 从此岸到彼岸");
System.out.println("此岸" + listThis + "," + "彼岸" + listThat);
System.out.println();
listThat.add(str);
thatToThis();
}else{
listThis.add(str);
thisTothat();
}
}
public void thatToThis(){
if(listThis.isEmpty()){
System.out.println("此岸" + listThis + "," + "彼岸" + listThat);
return;
}
if(isSafe(listThat)){
System.out.println("农夫从彼岸到此岸");
System.out.println("此岸" + listThis + "," + "彼岸" + listThat);
System.out.println();
thisTothat();
}else{
String str = listThat.get(0);
listThat.remove(0);
if(isSafe(listThat)){
System.out.println("农夫带着 " + str + " 从彼岸到此岸");
System.out.println("此岸" + listThis + "," + "彼岸" + listThat);
System.out.println();
listThis.add(str);
thisTothat();
}else{
listThat.add(str);
thatToThis();
}
}
}
public static void main(String[] args){
System.out.println("测试结果为:");
System.out.println();
new CrossRiver().thisTothat();
}
}
测试结果:
用java简单实现农夫、狼、羊和菜过河的问题