packagecom.my.courseDesign;public classCourseDesign {/** 1. 首先分为A岸,和B岸,A岸用0来表示,B岸用1来表示,在船上用1来表示,不再船上用0表示

* 2. 分别创建两个大小为4数组分别用来表示过河前和过河后的状态coast[4],cross[4],

* 再创建一个二维数组表示存储过河方式boat[][]

* 3. 经过分析符合岸上安全的情况为{0,0,0,0}、{1,1,1,1}、{1,0,1,0}、{1,1,1,0}、

* {1,1,0,1}、{1,0,1,1}、{0,1,0,0}、{0,0,1,0}、{0,0,0,1}、{0,1,0,1}十种情况,

* 过河有{1,0,0,0}{1,1,0,0}{1,0,1,0}{1,0,0,1}四种情况

* 经过分析发现如果假设:1(船)+1(岸)=0,0(船)+0(岸)=0,0(船)+1(岸)=1,1(船)+0(岸)=1成立则过完河

* 之后的情况正好是四者过完河后在岸上的状态,思考后发现可以用求余的方式来实现

* 4. 创建一个方法返回过完河后两岸状态

* 5. 创建一个方法来判断过完河后状态是否为安全状态,如果不是则接着遍历,是的话则打印过河状态

* 6. 创建一个方法对该次过河进行打印

* 7. 创建一个方法将过完河后的状态赋值给过河前状态

* 8. 通过循环遍历对过河进行实现

*

*

*

**/

static int[] coast={0,0,0,0}; //表示过河前状态

static int[][] boat={{1,1,0,0},{1,0,1,0},{1,0,0,1},{1,0,0,0}}; //所有过河方式

static int[] cross=new int[4]; //表示过完河后的状态

public static voidmain(String[] args){while (coast[0]+coast[1]+coast[2]+coast[3]!=4){ //只要四者没有全部到B岸就一直过河

for (int i=0;i<4;i++){ //对四种过河方式进行对比

nextCoast(i,coast,boat); //调用nextCoast()方法返回过完河后两岸状态

if (isSafe(cross)){ //调用isSafe()方法判断过完河后是否都处于安全状态

print(); //如果都安全则调用print()方法对该次过河进行打印

exchangCoast(); //调用exchangCoast()方法将过完河后的状态赋值给过河前状态

System.out.println(); //换行

}

}

}

System.out.println("过河成功!"); //所有人过完之后输出成功

}public static void nextCoast(int i,int[] coast,int[][] boat){ //编写nextCoast()方法返回过完河后两岸状态

cross[0]=(coast[0]+boat[i][0])%2; //通过取余来实现做出的设定

cross[1]=(coast[1]+boat[i][1])%2;

cross[2]=(coast[2]+boat[i][2])%2;

cross[3]=(coast[3]+boat[i][3])%2;

}public static boolean isSafe(int[] cross){ //编写isSafe()方法判断过完河后是否都处于安全状态

if( //对10种安全的情况依次做对比

(cross[0]==1 && cross[1]==1 && cross[2]==1 && cross[3]==1) ||(cross[0]==0 && cross[1]==0 && cross[2]==0 && cross[3]==0) ||(cross[0]==1 && cross[1]==0 && cross[2]==1 && cross[3]==0) ||(cross[0]==1 && cross[1]==1 && cross[2]==1 && cross[3]==0) ||(cross[0]==1 && cross[1]==1 && cross[2]==0 && cross[3]==1) ||(cross[0]==1 && cross[1]==0 && cross[2]==1 && cross[3]==1) ||(cross[0]==0 && cross[1]==1 && cross[2]==0 && cross[3]==0) ||(cross[0]==0 && cross[1]==0 && cross[2]==1 && cross[3]==0) ||(cross[0]==0 && cross[1]==0 && cross[2]==0 && cross[3]==1) ||(cross[0]==0 && cross[1]==1 && cross[2]==0 && cross[3]==1)

){return true;

}else{return false;

}

}public static void print(){ //编写print()方法对该次过河进行打印

if (cross[0]==1){

System.out.print("从A岸到B岸:");

}else{

System.out.print("从B岸到A岸:");

}if(cross[0]!=coast[0]){

System.out.print("人");

}if(cross[1]!=coast[1]){

System.out.print("带狼");

}if(cross[2]!=coast[2]){

System.out.print("带羊");

}if(cross[3]!=coast[3]){

System.out.print("带白菜");

}

System.out.print("过河");

}public static void exchangCoast(){ //编写exchangCoast()方法将过完河后的状态赋值给过河前状态

for (int i=0;i<4;i++){

coast[i]=cross[i];

}

}

}

农夫过河+java,农夫过河问题(java版)相关推荐

  1. java农夫过河_农夫过河问题(java版)

    packagecom.my.courseDesign;public classCourseDesign {/** 1. 首先分为A岸,和B岸,A岸用0来表示,B岸用1来表示,在船上用1来表示,不再船上 ...

  2. 农夫过河算法java,Java农夫过河问题的继承与多态实现详解

    Java农夫过河问题的继承与多态实现详解 发布时间:2020-08-22 06:04:29 来源:脚本之家 阅读:61 作者:小任性嘛 题目描述: 一个农夫带着一匹狼.一只羊.一颗白菜要过河,只有一条 ...

  3. 狼羊菜过河问题深入学习分析——Java语言描述版

    前言 这个问题的抛出,是几个星期之前的算法课程.老师分析了半天,最后的结论是:其实就是图的遍历.那时候挺懵逼的,不管是对于图,还是遍历,或者是数据结构,心里面都没有一个十足的概念,所以搁置了这么久的问 ...

  4. java狼羊草过河_狼羊菜过河问题深入学习分析——Java语言描述版

    前言 这个问题的抛出,是几个星期之前的算法课程.老师分析了半天,最后的结论是:其实就是图的遍历.那时候挺懵逼的,不管是对于图,还是遍历,或者是数据结构,心里面都没有一个十足的概念,所以搁置了这么久的问 ...

  5. 农夫 狼 羊 白菜 java,农夫、狼、羊、白菜(回溯法求解)

    为了复试准备,最近做了很多上机题,映象最最深的就是一道关于农夫.狼.羊.白菜的问题.该问题描述如下:有一个农夫带一只羊.一筐菜和一只狼过河.果没有农夫看管,则狼要吃羊,羊要吃菜.但是船很小,只够农夫带 ...

  6. 过河问题(牛虎过河、商人仆人过河、农夫妖怪过河、传教士野人过河)(第2届第2题)

    ▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼ 最新链接 题目要求 问题描述:三只牛三只虎过河,船最多只能容纳两只动物,且船在往返途中不能为空. ...

  7. flash静态的农夫走路_智力游戏过河|智力游戏过河flash合集下载 _单机游戏下载...

    智力游戏过河,过河游戏是经典的益智游戏了,需要很高的IQ,能很好锻炼逻辑能力,经典的过河游戏有人鬼过河,农夫过河,高IQ过河,青蛙过河等等.跑跑车为您提供的智力游戏过河flash合集,包含了这一些游戏 ...

  8. 《深入理解Java虚拟机》(第二版)学习3:垃圾收集器

    垃圾收集器 如果说收集算法是内存回收的方法论,那么垃圾收集器就是内存回收的具体实现. 我们这里讨论的收集器主要是基于JDK 1.7 Update 14之后的 Hotspot VM . Serial 收 ...

  9. Error:java: 无效的源发行版: 11

    Error:java: 无效的源发行版: 11 1.问题描述 2.原因查找 3.解决办法 3.1 打开IDEA的File-Project Structure设置 3.2 修改Project SDK为自 ...

最新文章

  1. c/c++获取文件大小的方法
  2. [MySQL] 索引与性能(3)- 覆盖索引
  3. python 打包exe thread报错_pyinstaller 打包exe 遇到的坑
  4. js获取window窗口高度(页面滚动条可滚动高度) - 代码篇
  5. 傅里叶变换和自然对数e原来是这么回事
  6. 解决Ubuntu下载缓慢问题
  7. [转载]项目风险管理七种武器-长生剑
  8. case和for、while循环详解
  9. html+css实现轮播图
  10. 圣天诺HL加密锁(原HASP加密锁)快速入门
  11. 台达plc 某系统的温控模块和模拟量输入模块
  12. bq30z55调试常见故障排除
  13. 如何区别随身WiFi板子是什么芯片
  14. Html的块状元素和内联元素
  15. 如何找计算机配置文件,怎么查看电脑系统配置
  16. terminatethread导致内存泄露
  17. 数据结构和算法思维导图
  18. 如何将string的日期转换为date的通用方法,包含正则表达处理(一)
  19. 仿“香哈菜谱”微信小程序(第4章)
  20. Acrel-6000电气火灾监控系统在昆明长水国际机场的应用-安科瑞华楠

热门文章

  1. pads中如何设置等长_如何在SQL Server中设置扩展,监控系统性能
  2. mysql replication延迟_深入mysql主从复制延迟问题的详解
  3. 数据结构排序3-堆排序
  4. 数据结构-栈5-栈的应用-后缀转中缀
  5. bzoj5324:[Jxoi2018]守卫
  6. 3、事件响应函数(一)
  7. 从原理上搞定编码-- Base64编码
  8. oracle层次化查询
  9. Oracle推出支援.NET 3.5与Visual Studio 2008的开发工具
  10. 从头开始建立神经网络翻译及扩展