问题描述

一个8×8的棋盘上有一个马初始位置为(a,b),他想跳到(c,d),问是否可以?如果可以,最少要跳几步?


输入格式

一行四个数字a,b,c,d。


输出格式

如果跳不到,输出-1;否则输出最少跳到的步数。

核心思想:BFS算法(宽搜)

(不讲解bfs算法,大家可以去b站基本了解,有助于看懂下面的思想和代码)不怕你学不会系列:宽度优先搜索_哔哩哔哩_bilibili宽度优先搜索基本思想https://www.bilibili.com/video/BV1H44y1871A/?spm_id_from=autoNext        使用原因有二

:马有8步选择,不清楚第几步选择,第几次走8步可以到达目标值,所以本质上需要遍历所有结果,也就是要么bfs(深度搜索)要么bfs(宽度搜索)。前者适合解决的是所有路径,后者解决的则是最短路径,所以这里用bfs算法更好

:使用的是队列,dfs算法用的是栈,bfs算法用的是队列,两者的区别就是后者是先进先出,那么,我根据当前遍历的值,比如说是(1,1)找到它下八个值之后,我就要把(1,1)弹出去,指针指向下一位(也即是(1,1)下八个值的第一个值,比如是(2,3))。这样保证我们能遍历完所有的值。

程序思想

1.接受初始步a,b 终点步 c,d


2.判断a ,b 和c,d 是否相等。是就直接输出,螺旋上天。


3.bfs算法求解最短路径


3.1声明两个计数器,一个表示马真正走了多少步,一个表示队列存了多少种(未计算下一步的)坐标。


3.2循环,每次都拿队列第一个数来求出八种坐标,并且判断是否我们要的结果,是就步数计数器+1,直接返回,跳出循环。不是就把这个坐标存到队列中,以后还得拿来求它的下一八步嘞。存完之后,队列计数器也要加一,并且存完八个,队列第一个数就没用了,要弹出,给下一个数空间。


代码如下:

import java.util.Arrays;
import java.util.Deque;
import java.util.LinkedList;
import java.util.Scanner;public class Main01 {//跳马问题//BFS +算法//八行两列的马步。static int[][] ma = {{1,2},{-1,2},{1,-2},{-1,-2},{2,1},{-2,1},{2,-1},{-2,-1}};public static void main(String[] args) {Scanner in = new Scanner(System.in);int a = in.nextInt();int b = in.nextInt();int c = in.nextInt();int d = in.nextInt();//ab,初始坐标。cd终点坐标。tiaoma(a, b, c, d);}static void tiaoma(int a, int b,int c, int d){//初始化队列Deque<int[]> B = new LinkedList<>();B.offer(new int[]{a,b});//计数器int cout = 0;int incout =0;//第0步if (a == c && c == d) {System.out.println(cout);return;}//第n步while (true){for(int[] i : ma) {//临时数组int[] at = new int[2];at[0] = B.getFirst()[0]+i[0];at[1] = B.getFirst()[1]+i[1];//如果是目标值,就直接返回if(Arrays.toString(at).equals(Arrays.toString(new int[]{c, d}) )){System.out.println(cout+1);return;}//不是就存入.并且内部计数器+1B.offer(at);incout+=1;//如果存入的数据够了,就让外部计数器+1if (Math.pow(8,cout+1)==incout){cout+=1;}}  //循环一次之后,新八值就找到了,那么可以弹栈了B.pollFirst();}}
}

结果(还是很美的)

(这里插几句,为什么不考虑负数的情况,不考虑出界的问题,emmm出界问题确实没考虑。负数的情况就是(1,1)下一步(-1,0)在棋盘上不存在,但是(-1,0)下一步(0,2)回来了,还跑到别的地方去了,那么这到底算可以还是不可以捏?其实你把棋盘化成坐标轴,你会发现它是对称的,也就是如果它真的能走回来,并且走到我们要的答案,那么一定也会有对称的,同样的步数,并且一直在棋盘内的走法,也能走到目标值,所以跑到外界去了,问题不大)

如图:

蓝桥杯 java 跳马问题相关推荐

  1. 蓝桥杯java备赛Day3——跳马

    蓝桥杯java备赛A组--跳马 问题描述 问题描述: 一个8×8的棋盘上有一个马初始位置为(a,b),他想跳到(c,d),问是否可以?如果可以,最少要跳几步? 输入格式: a,b,c,d 输出格式: ...

  2. java蓝桥杯凑算是,第七届蓝桥杯JAVA B组真题解析-凑算式(第三题)

    第七届蓝桥杯JAVA B组真题解析-凑算式(第三题) 凑算式 A+B/C+DEF/GHI =10 (如果显示有问题,可以参见[图1.jpg]) 这个算式中AI代表19的数字,不同的字母代表不同的数字. ...

  3. 蓝桥杯Java历年真题与答案_蓝桥杯大赛java历年真题及答案整理(闭关一个月呕心沥血整理出来的)...

    蓝桥杯大赛java历年真题及答案整理(闭关一个月呕心沥血整理出来的) 1蓝桥杯 java 历年真题及答案整理(闭关一个月,呕心沥血整理出来的)1. 算法是这样的,如果给定 N 个不同字符,将这 N 个 ...

  4. 2015年 第06届 蓝桥杯 Java B组 决赛真题详解及小结

    蓝桥杯 Java B组 省赛决赛 真题详解及小结汇总[2013年(第4届)~2020年(第11届)] 第11届 蓝桥杯-第1.2次模拟(软件类)真题-(2020年3月.4月)-官方讲解视频 说明:大部 ...

  5. 2016年 第07届 蓝桥杯 Java B组 决赛真题详解及小结

    蓝桥杯 Java B组 省赛决赛 真题详解及小结汇总[2013年(第4届)~2020年(第11届)] 第11届 蓝桥杯-第1.2次模拟(软件类)真题-(2020年3月.4月)-官方讲解视频 说明:大部 ...

  6. 2017年 第08届 蓝桥杯 Java B组 决赛真题详解及小结

    ​​​​​蓝桥杯 Java B组 省赛决赛 真题详解及小结汇总[2013年(第4届)~2020年(第11届)] 第11届 蓝桥杯-第1.2次模拟(软件类)真题-(2020年3月.4月)-官方讲解视频 ...

  7. 2018年 第09届 蓝桥杯 Java B组 决赛真题详解及小结

    蓝桥杯 Java B组 省赛决赛 真题详解及小结汇总[2013年(第4届)~2020年(第11届)] 第11届 蓝桥杯-第1.2次模拟(软件类)真题-(2020年3月.4月)-官方讲解视频 说明:大部 ...

  8. 2019年 第10届 蓝桥杯 Java B组 决赛真题详解及小结

    蓝桥杯 Java B组 省赛决赛 真题详解及小结汇总[2013年(第4届)~2020年(第11届)] 第11届 蓝桥杯-第1.2次模拟(软件类)真题-(2020年3月.4月)-官方讲解视频 说明:大部 ...

  9. 2020年 第11届 蓝桥杯 Java B组 省赛真题详解及小结【第1场省赛 2020.7.5】

    蓝桥杯 Java B组 省赛决赛 真题详解及小结汇总[2013年(第4届)~2021年(第12届)] 第11届 蓝桥杯-第1.2次模拟(软件类)真题-(2020年3月.4月)-官方讲解视频 说明:部分 ...

  10. 2020年 第11届 蓝桥杯 Java C组 省赛真题详解及小结【第1场省赛 2020.7.5】

    蓝桥杯 Java B组 省赛真题详解及小结汇总[2013年(第4届)~2020年(第11届)] 注意:部分代码及程序 源自 蓝桥杯 官网视频(历年真题解析) 郑未老师. 2013年 第04届 蓝桥杯 ...

最新文章

  1. Javascript模板引擎handlebars使用实例及技巧
  2. 人工智能 | 自动驾驶与人工智能前沿研究报告(应用篇)
  3. git创建/合并分支/删除分支/将修改后的内容同步到GitHub远程仓库
  4. 逻辑漏洞-找回密码修改返回包
  5. R开发(part1)--R语言知识体系结构
  6. Atom常用功能插件
  7. python构建矩阵 x y_生成Python函数一半没问题,当前最正统的代码生成是什么样的?...
  8. android中的BitMap(二)从网络和资源文件中获得一个BitMap
  9. iOS开发——高级技术通讯录功能的实现
  10. 深圳人才引进,大学生,公司的福利
  11. SQL Server 2019安装教程(图文)
  12. 微信小程序 webview 传递URL中含有特殊字符-,=
  13. GDAL读写矢量文件——C#
  14. php为什么要创建类,php – 是否有理由为单一功能创建类?
  15. dell 服务器ghost系统,Dell 5000笔记本装win7 64位Ghost系统真正成功教程
  16. eps导入坐标文件_EPS一些简单地物的编辑
  17. SetupFactory安装前卸载旧版本
  18. 大数据高级开发工程师——大数据相关工具之三 Maxwell
  19. react-native 创建新的项目
  20. TX云虽然是大企业但其实让我有些难过

热门文章

  1. 2021爱智先行者—精灵1号的体验分享
  2. 电脑版微信定时发送消息
  3. STM32与ARM7、ARM9、ARM11
  4. Windows 10安装labelImg(有压缩包链接)标注弹孔,生成.xml文件。
  5. 深交所股票交易接口的概述
  6. CF 949D Curfew——贪心(思路!!!)
  7. 基于Matlab的机器人学建模学习资料大整理
  8. Java如何处理参数中带特殊符号的请求?
  9. CTF练习-小游戏解密俄罗斯方块
  10. websocket握手失败_WebSocket通信之握手协议