用java简单实现农夫、狼、羊和菜过河的问题
用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(); } }
测试结果: