黑马程序员——猫、狗、鱼过河问题解决办法
来源:互联网 发布:主持人音效易语言源码 编辑:程序博客网 时间:2024/04/27 23:34
代码实现:
import java.util.ArrayList;import java.util.List;import java.util.Random;/* * 第十题:一位老农带着猫、狗、鱼过河,河边有一条船,每次老农只能带一只动物过河。 * 当老农 不和猫狗鱼在一起时,狗会咬猫,猫会吃鱼,当老农和猫狗鱼在一起时,则不会发生 * 这种问题。编程解决猫狗鱼过河问题。 * * 解题思路: 由于他们三只动物狗、猫、鱼存在着狗咬猫、猫吃鱼的关系,我把他们想成一 * 条链:狗-->猫-->鱼,其中键尾动物对箭头动物有危害。所以从图中关系可以知道只要先拿走 * 猫到对岸,然后从鱼和狗中随便拿一种到对岸,再把对岸的猫拿到这边,再把这边岸上除猫以外 * 的动物拿到对面,最后回来把猫带回对岸。简单描述就是:带猫到过去, 带狗或鱼其中之一过去, * 带猫过来, 带狗和鱼其中之一过去, 最后把猫带过去。 * 代码实现方式:创建两个List集合,分别存储左岸和右岸当前的动物,在过河的时候 * 用一个递归函数来实现,当递归到左岸没有动物或者是右岸有三个动物时就表示过河完成。 * */public class Test10 {//创建一个存储左岸动物的集合static List<String> leftSide = new ArrayList<String>();//创建一个存储右岸动物的集合static List<String> rightSide = new ArrayList<String>();public static void main(String[] args) {//初始状态猫、狗、鱼都在左岸leftSide.add("cat");leftSide.add("dog");leftSide.add("fish");//过河函数takeRiver(null);}//过河函数,其中参数表示上一次过河带来的动物,如果上一次过河没有带动物值为空public static void takeRiver(String str){//判断如果左岸为空或者右岸有猫狗鱼时过河完成if(leftSide.size()==0 || rightSide.size()==3){System.out.println("过河完成");return ;}int i = new Random().nextInt(leftSide.size());//为了避免这次过河所带的动物是上一次过河带过来的动物if(str != null){while(leftSide.get(i).equals(str)){i = new Random().nextInt(leftSide.size());}}String animal = leftSide.get(i);leftSide.remove(animal);//判断左岸是否有危险if(judge(leftSide)){System.out.println("把 " + animal + " 从左岸带到了右岸 ");rightSide.add(animal);//判断如果右岸有猫狗鱼时过河完成if(rightSide.size()==3){//for(String s : )System.out.println("过河完成");return ;}if(judge(rightSide)){//右岸没有危险, 直接过河不用带动物过河takeRiver(null);}else{//如果右岸存在危险则带一个动物过去左岸int k = new Random().nextInt(rightSide.size());//为了避免这次过河所带的动物是上一次过河带过来的动物while(rightSide.get(k).equals(animal)){k = new Random().nextInt(rightSide.size());}String animal0 = rightSide.get(k);rightSide.remove(animal0);leftSide.add(animal0);System.out.println("把 " + animal0 + " 从右岸带到了左岸 ");takeRiver(animal0);}}else{ //如果带走左岸动物后,左岸出现危险则另外选一个动物过河leftSide.add(animal);takeRiver(null);}}//判断是否有危险public static boolean judge(List<String> list){if(list.contains("cat") && list.contains("fish")){return false;}else if(list.contains("dog") && list.contains("cat")){return false;}return true;}}
<a href="http://www.itheima.com" target="blank">java培训</a>、期待与您交流! ----------
0 0
- 黑马程序员——猫、狗、鱼过河问题解决办法
- 黑马程序员——农夫猫鱼狗过河
- 黑马程序员-10.一位老农带着猫、狗、鱼过河
- 黑马程序员学习笔记——过河问题
- 黑马程序员-----第十题 : 一位老农带着猫、狗、鱼过河问题
- 黑马程序员———用图论解决基础测试题之农夫过河问题
- 黑马程序员:多线程 VS 传统办法——取二维数组的最值
- 黑马程序员—泛型
- 黑马程序员—多线程
- 黑马程序员—DOM
- 黑马程序员—javabean
- 黑马程序员—xml
- 黑马程序员—多线程
- 黑马程序员—反射
- 黑马程序员—多线程
- 黑马程序员—HTML
- 黑马程序员—反射
- 黑马程序员—泛型
- 最新设备管理器漏洞分析
- http://blog.chinaunix.net/uid-20543672-id-3244832.html
- 三个脚趾头踏入IT行业的感想
- 【白话经典算法系列之十二】数组中只出现1次的两个数字(百度面试题)
- Qt Creator 下 android 开发环境的搭建
- 黑马程序员——猫、狗、鱼过河问题解决办法
- [版本]win7 git copssh 搭建补充
- Yii中使用RBAC完全指南 (用户角色权限控制)
- 无法定位程序输入点 于动态链接QtCore4.dll库上
- Java的容器类们
- UVa 11734 - Big Number of Teams will Solve This
- 【白话经典算法系列之十三】随机生成和为S的N个正整数——投影法
- [版本]Windows下搭建 Git 服务器
- 转一个通俗易懂讲解FFT物理意义的文章