如何使用java实现马踏棋盘
发表于:2025-01-18 作者:千家信息网编辑
千家信息网最后更新 2025年01月18日,这篇文章将为大家详细讲解有关如何使用java实现马踏棋盘,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。具体内容如下马踏棋盘算法也被称为骑士周游问题将马随机放在过期象
千家信息网最后更新 2025年01月18日如何使用java实现马踏棋盘
这篇文章将为大家详细讲解有关如何使用java实现马踏棋盘,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。
具体内容如下
马踏棋盘算法也被称为骑士周游问题
将马随机放在过期象棋的8x8棋盘的某个方格中,马按走棋规则进行移动,要求每个方格只进入一次,走遍棋盘上全部64个方格
骑士周游问题结局步骤和思路
1.创建棋盘chessBoard,是一个二维数组
2.将当前位置设置为已个访问,然后根据当前位置,计算马儿还能走那些位置,并放到一个集合中(ArrayList),最多8个位置
3.变量ArrayList存放的所有位置,看看哪个可以走通
4.判断马儿是否完成了骑士周游问题
注意:马儿不同的走法,会得到不同的结果,效率也会有影响
代码实现
public class HorseChessBoard { private static int X; //棋盘的列数 private static int Y; //棋盘的行数 //创建数组标记棋盘各个位置是否被访问过 private static boolean[] visited; //使用一个属性标记是否棋盘的所有位置都被访问过,即是否成功 private static boolean finish; //如果为true表示成功 public static void main(String[] args) { X = 8; Y = 8; int row = 1; int col = 1; int[][] chessboard = new int[X][Y]; visited = new boolean[X * Y]; long start = System.currentTimeMillis(); traversalChessboard(chessboard, row-1, col-1, 1); long end = System.currentTimeMillis(); System.out.println(end - start); for (int[] rows : chessboard) { for (int step : rows) { System.out.print(step + " "); } System.out.println(); } } //其实周游问题 public static void traversalChessboard(int[][] chessboard, int row, int col, int step) { if (finish) return; chessboard[row][col] = step; visited[row * X + col] = true; //标记该位置已经访问 //获取当前位置可以走的下一个位置的集合 Listps = next(new Point(col, row)); sort(ps); //遍历ps while (!ps.isEmpty()) { Point p = ps.remove(0); //取出下一个可以走的位置 //判断该点是否已经访问过 if (!visited[p.y * X + p.x]) { traversalChessboard(chessboard, p.y, p.x, step+1); } } //1. 棋盘到目前位置任然未走完 //2. 棋盘处于一个回溯过程 if (step < X * Y && !finish) { chessboard[row][col] = 0; visited[row * X + col] = false; } else { finish = true; } } //根据当前这一步的所有的下一步的选择位置进行非递减排序 public static void sort(List ps) { ps.sort(new Comparator () { @Override public int compare(Point o1, Point o2) { //获取o1,o2下一步所有个数 int count1 = next(o1).size(); int count2 = next(o2).size(); if (count1 < count2) { return -1; } else if (count1 == count2) { return 0; } else { return 1; } } }); } //Point:根据当前位置(point对象) //根据当前位置,计算马儿还能走那些位置,并放到一个集合中(ArrayList),最多8个位置 public static List next(Point curPoint) { //创建list集合 List ps = new ArrayList<>(); //创建一个point Point p1 = new Point(); if ((p1.x = curPoint.x-2) >= 0 && (p1.y = curPoint.y-1) >= 0) { ps.add(new Point(p1)); } if ((p1.x = curPoint.x-1) >= 0 && (p1.y = curPoint.y-2) >= 0) { ps.add(new Point(p1)); } if ((p1.x = curPoint.x+1) < X && (p1.y = curPoint.y-2) >= 0) { ps.add(new Point(p1)); } if ((p1.x = curPoint.x+2) < X && (p1.y = curPoint.y-1) >= 0) { ps.add(new Point(p1)); } if ((p1.x = curPoint.x+2) < X && (p1.y = curPoint.y+1) < Y) { ps.add(new Point(p1)); } if ((p1.x = curPoint.x+1) < X && (p1.y = curPoint.y+2) < Y) { ps.add(new Point(p1)); } if ((p1.x = curPoint.x-1) >= 0 && (p1.y = curPoint.y+2) < Y) { ps.add(new Point(p1)); } if ((p1.x = curPoint.x-2) >= 0 && (p1.y = curPoint.y+1) < Y) { ps.add(new Point(p1)); } return ps; }}
关于"如何使用java实现马踏棋盘"这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,使各位可以学到更多知识,如果觉得文章不错,请把它分享出去让更多的人看到。
位置
棋盘
问题
马儿
方格
标记
篇文章
骑士
不同
成功
个位
内容
数组
更多
不错
实用
个数
代码
变量
对象
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
云锐服务器
rac 数据库创建实例
数据库中树状表的原理
汽车ecm软件开发
网络安全数据链路
不属于网络安全异常流量
黄浦区智能软件开发服务保障
终端服务器回收价格表
小学 网络安全
网络安全大赛视频kk
网络安全信息会议
手机网络安全教育题目
中油优途登陆提示服务器请求出错
专业性软件开发市场价
网络安全问题创新性举措
php连接数据库表格数据
数据库指定的位置插入列
数据库定义二维数组命令
大数据软件开发怎么样
服务器中的web应用
服务器未开启怎样修复
genome是什么数据库
台州恩拓网络技术有限公司
变压器设计软件开发
基层政府计算机网络安全
geo数据库芯片号
南川天气预报软件开发
嵌入式软件开发可以学习吗
浪潮机架式服务器大概多少钱
我的世界空岛服务器怎么领取空岛