Java簡單實(shí)現(xiàn)農(nóng)夫過河問題示例
本文實(shí)例講述了Java簡單實(shí)現(xiàn)農(nóng)夫過河問題。分享給大家供大家參考,具體如下:
一、問題描述
老伯伯要帶魚、狗、貓過河到對(duì)岸.,有一條船,只能坐一個(gè)人,老伯每次只能帶一樣動(dòng)物過河,當(dāng)老伯不在的時(shí)侯狗會(huì)咬貓,貓會(huì)吃魚.,請(qǐng)問怎么順序過河呢?
二、實(shí)現(xiàn)代碼
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>();
/*boolean thisFlag = true;
boolean thatFlag = false;
*/
public CrossRiver() {
listThis.add("dog");
listThis.add("fish");
listThis.add("cat");
// listThis.add("people");
}
public boolean isSafe(@SuppressWarnings("rawtypes") List list){
if(list.contains("fish")&&list.contains("cat")||list.contains("cat")&&list.contains("dog")){
return false;
}else{
return true;
}
}
public void thisTothat(){
String str = listThis.get(0);
listThis.remove(str);
if(this.isSafe(listThis)){
System.out.println("農(nóng)夫帶著 " + str + " 從此岸到彼岸");
System.out.println("此岸" + listThis + "\b" + "彼岸" + listThat);
System.out.println();
listThat.add(str);
thatToThis();
}else{
listThis.add(str);
thisTothat();
}
}
public void thatToThis(){
if(listThis.isEmpty()){
System.out.println("此岸" + listThis + "\b" + "彼岸" + listThat);
return;
}
if(isSafe(listThat)){
System.out.println("農(nóng)夫從彼岸到此岸");
System.out.println("此岸" + listThis + "\b" + "彼岸" + listThat);
System.out.println();
thisTothat();
}else{
String str = listThat.get(0);
listThat.remove(0);
if(isSafe(listThat)){
System.out.println("農(nóng)夫帶著 " + str + " 從彼岸到此岸");
System.out.println("此岸" + listThis + "\b" + "彼岸" + listThat);
System.out.println();
listThis.add(str);
thisTothat();
}else{
listThat.add(str);
thatToThis();
}
}
}
public static void main(String[] args){
System.out.println("腳本之家測試結(jié)果:");
System.out.println();
new CrossRiver().thisTothat();
}
}
運(yùn)行結(jié)果:

更多關(guān)于java算法相關(guān)內(nèi)容感興趣的讀者可查看本站專題:《Java數(shù)據(jù)結(jié)構(gòu)與算法教程》、《Java操作DOM節(jié)點(diǎn)技巧總結(jié)》、《Java文件與目錄操作技巧匯總》和《Java緩存操作技巧匯總》
希望本文所述對(duì)大家java程序設(shè)計(jì)有所幫助。
- C++基于人工智能搜索策略解決農(nóng)夫過河問題示例
- 基于C++的農(nóng)夫過河問題算法設(shè)計(jì)與實(shí)現(xiàn)方法
- Java遞歸算法經(jīng)典實(shí)例(經(jīng)典兔子問題)
- Java實(shí)現(xiàn)的猴子吃桃問題算法示例
- Java數(shù)據(jù)結(jié)構(gòu)及算法實(shí)例:漢諾塔問題 Hanoi
- Java基于循環(huán)遞歸回溯實(shí)現(xiàn)八皇后問題算法示例
- 淺談java實(shí)現(xiàn)背包算法(0-1背包問題)
- Java矩陣連乘問題(動(dòng)態(tài)規(guī)劃)算法實(shí)例分析
- Java算法之最長公共子序列問題(LCS)實(shí)例分析
- Java基于遞歸解決全排列問題算法示例
- Java基于分治算法實(shí)現(xiàn)的棋盤覆蓋問題示例
相關(guān)文章
一文詳解Redisson分布式鎖底層實(shí)現(xiàn)原理
這篇文章主要詳細(xì)介紹了Redisson分布式鎖底層實(shí)現(xiàn)原理,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2023-07-07
Java接入微信支付超級(jí)詳細(xì)保姆級(jí)教程
這篇文章主要給大家介紹了關(guān)于Java接入微信支付的相關(guān)資料,包括l 準(zhǔn)備開發(fā)所需的賬號(hào)和配置信息、準(zhǔn)備環(huán)境、設(shè)置開發(fā)參數(shù)以及實(shí)現(xiàn)支付接口,回調(diào)地址的設(shè)置和異步回調(diào)通知的處理也是文章的重點(diǎn)內(nèi)容,需要的朋友可以參考下2024-12-12
Java向Runnable線程傳遞參數(shù)方法實(shí)例解析
這篇文章主要介紹了Java向Runnable線程傳遞參數(shù)方法實(shí)例解析,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-06-06
Java警告:原發(fā)性版11需要目標(biāo)發(fā)行版11的解決方法和步驟
這篇文章主要介紹了Java警告:原發(fā)性版11需要目標(biāo)發(fā)行版11的解決方法和步驟,文中通過圖文介紹的非常詳細(xì),對(duì)大家學(xué)習(xí)或者使用java具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2025-04-04
使用SpringBoot+AOP實(shí)現(xiàn)可插拔式日志的示例代碼
這篇文章主要介紹了使用SpringBoot+AOP實(shí)現(xiàn)可插拔式日志的示例代碼,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2019-07-07
java swing 實(shí)現(xiàn)加載自定義的字體
這篇文章主要介紹了java swing 實(shí)現(xiàn)加載自定義的字體,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-11-11
java實(shí)現(xiàn)微信公眾平臺(tái)自定義菜單的創(chuàng)建示例
這篇文章主要介紹了java實(shí)現(xiàn)微信公眾平臺(tái)自定義菜單的創(chuàng)建示例,需要的朋友可以參考下2014-04-04
詳解Intellij IDEA中.properties文件中文顯示亂碼問題的解決
這篇文章主要介紹了詳解Intellij IDEA中.properties文件中文顯示亂碼問題的解決,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-11-11

