农夫过河+java,农夫过河问题(java版)
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版)相关推荐
- java农夫过河_农夫过河问题(java版)
packagecom.my.courseDesign;public classCourseDesign {/** 1. 首先分为A岸,和B岸,A岸用0来表示,B岸用1来表示,在船上用1来表示,不再船上 ...
- 农夫过河算法java,Java农夫过河问题的继承与多态实现详解
Java农夫过河问题的继承与多态实现详解 发布时间:2020-08-22 06:04:29 来源:脚本之家 阅读:61 作者:小任性嘛 题目描述: 一个农夫带着一匹狼.一只羊.一颗白菜要过河,只有一条 ...
- 狼羊菜过河问题深入学习分析——Java语言描述版
前言 这个问题的抛出,是几个星期之前的算法课程.老师分析了半天,最后的结论是:其实就是图的遍历.那时候挺懵逼的,不管是对于图,还是遍历,或者是数据结构,心里面都没有一个十足的概念,所以搁置了这么久的问 ...
- java狼羊草过河_狼羊菜过河问题深入学习分析——Java语言描述版
前言 这个问题的抛出,是几个星期之前的算法课程.老师分析了半天,最后的结论是:其实就是图的遍历.那时候挺懵逼的,不管是对于图,还是遍历,或者是数据结构,心里面都没有一个十足的概念,所以搁置了这么久的问 ...
- 农夫 狼 羊 白菜 java,农夫、狼、羊、白菜(回溯法求解)
为了复试准备,最近做了很多上机题,映象最最深的就是一道关于农夫.狼.羊.白菜的问题.该问题描述如下:有一个农夫带一只羊.一筐菜和一只狼过河.果没有农夫看管,则狼要吃羊,羊要吃菜.但是船很小,只够农夫带 ...
- 过河问题(牛虎过河、商人仆人过河、农夫妖怪过河、传教士野人过河)(第2届第2题)
▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼ 最新链接 题目要求 问题描述:三只牛三只虎过河,船最多只能容纳两只动物,且船在往返途中不能为空. ...
- flash静态的农夫走路_智力游戏过河|智力游戏过河flash合集下载 _单机游戏下载...
智力游戏过河,过河游戏是经典的益智游戏了,需要很高的IQ,能很好锻炼逻辑能力,经典的过河游戏有人鬼过河,农夫过河,高IQ过河,青蛙过河等等.跑跑车为您提供的智力游戏过河flash合集,包含了这一些游戏 ...
- 《深入理解Java虚拟机》(第二版)学习3:垃圾收集器
垃圾收集器 如果说收集算法是内存回收的方法论,那么垃圾收集器就是内存回收的具体实现. 我们这里讨论的收集器主要是基于JDK 1.7 Update 14之后的 Hotspot VM . Serial 收 ...
- Error:java: 无效的源发行版: 11
Error:java: 无效的源发行版: 11 1.问题描述 2.原因查找 3.解决办法 3.1 打开IDEA的File-Project Structure设置 3.2 修改Project SDK为自 ...
最新文章
- c/c++获取文件大小的方法
- [MySQL] 索引与性能(3)- 覆盖索引
- python 打包exe thread报错_pyinstaller 打包exe 遇到的坑
- js获取window窗口高度(页面滚动条可滚动高度) - 代码篇
- 傅里叶变换和自然对数e原来是这么回事
- 解决Ubuntu下载缓慢问题
- [转载]项目风险管理七种武器-长生剑
- case和for、while循环详解
- html+css实现轮播图
- 圣天诺HL加密锁(原HASP加密锁)快速入门
- 台达plc 某系统的温控模块和模拟量输入模块
- bq30z55调试常见故障排除
- 如何区别随身WiFi板子是什么芯片
- Html的块状元素和内联元素
- 如何找计算机配置文件,怎么查看电脑系统配置
- terminatethread导致内存泄露
- 数据结构和算法思维导图
- 如何将string的日期转换为date的通用方法,包含正则表达处理(一)
- 仿“香哈菜谱”微信小程序(第4章)
- Acrel-6000电气火灾监控系统在昆明长水国际机场的应用-安科瑞华楠