用java写的马踏棋盘算法

将马随机放在国际象棋的8×8棋盘Board[0~7][0~7]的某个方格中,马按走棋规则进行移动。要求每个方格只进入一次,走遍棋盘上全部64个方格。


代码


/*
马踏棋盘问题
思路:
用深度优先遍历+回溯法
1,初始化一个8*8的矩阵,元素都为1
2,设定马的起始位置(x,y),对走过的节点做标记
3,对起始位置的下个一位置的8种可能,做循环操作,若没有路可走(也就是一条路走到头,发现返回结果为false),则开始进行回溯
4,在循环到的节点重复步骤2,3(也就是循环中用递归)。要找到可能的线路,而不是简单的遍历所有,不能用广度优先遍历
*/
class HorseOnChessboard{static int[][] matrix=new int[8][8];static int[][] flag=new int[8][8];public static void createMatrix(){for(int i=0;i<8;i++){for(int j=0;j<8;j++){matrix[i][j]=0;flag[i][j]=0;}}}static int[] step1={1,1,-1,-1,2,2,-2,-2};static int[] step2={2,-2,2,-2,1,-1,1,-1};public static boolean check(int x,int y){if(x>7||x<0||y>7||y<0||flag[x][y]==1)return false;return true;}public static boolean dfs(int x,int y,int step){flag[x][y]=1;matrix[x][y]=step;if(step==64){print();return true;}for(int i=0;i<8;i++){if(check(x+step1[i],y+step2[i])){step++;boolean result=dfs(x+step1[i],y+step2[i],step);//参数局部变量,并不对x做改变if(result==true)//一直走到最后,若满足条件输出,若不满足回溯return true;//这里节点使用的是局部变量x+step1,因此节点不用回溯flag[x+step1[i]][y+step2[i]]=0;matrix[x+step1[i]][y+step2[i]]=0;step--;}}return false;}public static void print(){for(int i=0;i<8;i++){for(int j=0;j<8;j++){System.out.print(matrix[i][j]+" ");}System.out.println("");}}public static void main(String[] args) {createMatrix();boolean f=dfs(1, 7, 1);System.out.println(f);}
}

结果

57 52 45 38 47 50 35 64
44 39 56 51 36 63 48 1
53 58 37 46 49 2 31 34
40 43 60 55 32 29 62 3
59 54 41 28 61 4 33 30
42 27 16 19 22 11 8 5
17 20 25 14 9 6 23 12
26 15 18 21 24 13 10 7
true

用java写的马踏棋盘算法相关推荐

  1. java 马踏棋盘优化_我所知道的十大常用算法之马踏棋盘算法(深度搜索、贪心思想优化 )...

    前言需求 今天我们学习的是马踏棋盘算法,我们还是从一个场景里引入看看 马踏棋盘算法也被称为骑士周游问题 将马随机放在国际象棋的6×6棋盘Board0-5的某个方格中 提示:马按走棋规则(马走日字)进行 ...

  2. Day600601.马踏棋盘算法 -数据结构和算法Java

    马踏棋盘算法 图的深度优先DFS 回溯 八皇后问题.小老鼠找迷宫问题 一.介绍 二.思路分析 三.代码实现 package com.achang.algorithm;import java.awt.* ...

  3. 数据结构(七)——Dijkasta 、Flyod、马踏棋盘算法

    Dijkstra 算法 应用场景-最短路径问题 有 7 个村庄(A, B, C, D, E, F, G) ,现在有六个邮差,从 G 点出发,需要分别把邮件分别送到A, B, C , D, E, F 六 ...

  4. 【算法】马踏棋盘算法 骑士走周游算法

    文章目录 1.概述 2.贪心优化 1.概述 马踏棋盘算法和八皇后问题很相似:[算法]八皇后问题 骑士周游问题的解决步骤和思路 创建棋盘chessBoard,是一个二维数组 将当前位置设置为已经访问,然 ...

  5. 数据结构与算法|马踏棋盘算法(小甲鱼)C语言代码的算法分析

    马踏棋盘算法(骑士周游问题)的算法分析 C语言代码部分来自小甲鱼的<数据结构与算法> 文章目录 马踏棋盘算法(骑士周游问题)的算法分析 一.C语言代码实现 二.代码分析与算法思路 题目要求 ...

  6. 马踏棋盘算法(骑士周游问题)

    要求: 国家棋盘为8*8的方格棋盘,将"马"放在任意指定方格中.最终让马走遍64个方格. 关于象棋中马的走法 如下图所示: 下面是代码: #include <stdio.h& ...

  7. 基于Java Swing 的马踏棋盘小游戏(附源码!免费下载!)

    马踏棋盘游戏小项目 设计主要功能 运用的数据结构 运行流程讲解及录像 项目分类截图及源码链接! 设计主要功能 (1)设计内容:设计一个马踏棋盘游戏,马作为棋子,以马走日字的走法,将整个棋盘一次性走完, ...

  8. 【大话数据结构C语言】43 图的应用 - 马踏棋盘算法

    欢迎关注我的公众号是[CodeAllen],关注回复[1024]获取资源 程序员技术交流①群:736386324 ,程序员技术交流②群:371394777 题目要求: 国际象棋的棋盘为8*8的方格棋盘 ...

  9. 马踏棋盘算法(骑士周游)

    思路分析 代码实现 package com.atguigu.horse;import java.awt.*; import java.util.ArrayList; import java.util. ...

最新文章

  1. linux ntfs 挂载 centos,centos linux ntfs iso 挂载
  2. 关于变量在循环内声明还是在循环外声明
  3. Acwing第 18 场周赛【完结】
  4. LeetCode_617.合并二叉树
  5. lua split实现(lua程序设计10.6练习10.1题)
  6. ACM常用数列(斐波那契数列、卡特兰数、贝尔数、斯特灵数)
  7. Scala开发教程(16): 没有“break”和“continue”的日子
  8. 程序员经常看的开源月刊《HelloGitHub》第 57 期
  9. linux中sed或awk,Linux中sed和awk命令比较实例
  10. 491 Increasing Subsequences 递增子序列
  11. linux设置磁盘配额查看目录文件大小命令
  12. linux服务器启动ftp连接
  13. 10 个最佳 GIS 软件应用程序
  14. Python3合并ts文件
  15. p9plus升级鸿蒙教程,华为P9 Plus(VIE-AL10 全网通 EMUI 5.0)一键ROOT图文详解教程
  16. 通过脚手架安装Ant+react+umi+dva项目(一)
  17. jpg图片转换成PDF转换器免费版使用
  18. 2020 5 PON
  19. Thinkpad x250安装Windows10后指纹识别的问题
  20. buu-[WUSTCTF2020]level3

热门文章

  1. 东方财富网-股吧论坛帖子信息采集
  2. [Transformer]Efficient Training of Visual Transformers with Small Datasets
  3. 夜谈TCP/IP网络
  4. MongoDB(4):Docker下使用命令操作Mongo数据库
  5. android .so深入理解 abiFilters的使用等
  6. 计算机二级基础知识试题,xx年计算机二级基础知识试题及答案
  7. 你了解VMware和VMware认证吗?
  8. 如何批量发送html邮件,使用qq邮箱批量发送邮件 实例源码(支持富文本)
  9. 如何增加mysql主键约束_mysql修改表时怎么添加主键约束?
  10. 广义交叉验证(GCV)