骑士走棋盘(Knight tour)

问题说明:

骑士游戏,在十八世纪倍受数学家与拼图迷的注意,骑士的走法为西洋棋的走发,骑士可以由任何一个位置出发,它要如何走完所有的位置。

骑士的走法为:先横或竖1或2格,再竖或横2或1格,没有中国象棋蹩脚的限制。 如:从图中的(a,1)格跳到(b,3)或(c,2)格

结果:

Java代码:

package com.allen;

public class Knight {

public boolean travel(int startX,

int startY, int[][] board) {

// 对应骑士可以走的八个方向

int[] ktmove1 = {-2, -1, 1, 2, 2, 1, -1, -2};

int[] ktmove2 = {1, 2, 2, 1, -1, -2, -2, -1};

// 下一个出路的位置

int[] nexti = new int[board.length];

int[] nextj = new int[board.length];

// 记录出路的个数

int[] exists = new int[board.length];

int x = startX;

int y = startY;

board[x][y] = 1;

for(int m = 2; m <= Math.pow(board.length, 2); m++) {

for(int k = 0; k < board.length; k++) {

exists[k] = 0;

}

int count = 0;

// 试探八个方向

for(int k = 0; k < board.length; k++) {

int tmpi = x + ktmove1[k];

int tmpj = y + ktmove2[k];

// 如果是边界,不可以走

if(tmpi < 0 || tmpj < 0 ||

tmpi > 7 || tmpj > 7) {

continue;

}

// 如果这个方向可以走,记录下来

if(board[tmpi][tmpj] == 0) {

nexti[count] = tmpi;

nextj[count] = tmpj;

// 可走的方向加一个

count++;

}

}

int min = -1;

if(count == 0) {

return false;

}

else if(count == 1) {

min = 0;

}

else {

// 找出下个位置的出路数

for(int l = 0; l < count; l++) {

for(int k = 0; k < board.length; k++) {

int tmpi = nexti[l] + ktmove1[k];

int tmpj = nextj[l] + ktmove2[k];

if(tmpi < 0 || tmpj < 0 ||

tmpi > 7 || tmpj > 7) {

continue;

}

if(board[tmpi][tmpj] == 0)

exists[l]++;

}

}

int tmp = exists[0];

min = 0;

// 从可走的方向寻找最少出路的方向

for(int l = 1; l < count; l++) {

if(exists[l] < tmp) {

tmp = exists[l];

min = l;

}

}

}

// 走最少出路的方向

x = nexti[min];

y = nextj[min];

board[x][y] = m;

}

return true;

}

public static void main(String[] args) {

int[][] board = new int[8][8];

Knight knight = new Knight();

if(knight.travel(

Integer.parseInt(args[0]),

Integer.parseInt(args[1]), board)) {

System.out.println("走棋完成!");

}

else {

System.out.println("走棋失败!");

}

for(int i = 0; i < board.length; i++) {

for(int j = 0; j < board[0].length; j++) {

if(board[i][j] < 10) {

System.out.print(" " + board[i][j]);

}

else {

System.out.print(board[i][j]);

}

System.out.print(" ");

}

System.out.println();

}

}

}

这里

Integer.parseInt(args[0]),

Integer.parseInt(args[1]), board))

需要设置一下参数:

Java算法七:骑士走棋盘相关推荐

  1. C++骑士走棋盘Knight tour算法(附完整源码)

    骑士走棋盘Knight tour算法 骑士走棋盘Knight tour算法的完整源码(定义,实现,main函数测试) 骑士走棋盘Knight tour算法的完整源码(定义,实现,main函数测试) # ...

  2. 棋盘算法c语言程序,骑士走棋盘算法

    [c]代码库#include /*骑士走棋盘算法,骑士的走法为西洋棋的走法,骑士可以由任一个位置出发,它要如何走完[所有的位置?*/ /*解法骑士的走法,基本上可以使用递回来解决,但是纯綷的递回在维度 ...

  3. 棋盘算法c语言程序,C语言经典算法 - 骑士走棋盘

    搜索热词 @H_301_0@下面是编程之家 jb51.cc 通过网络收集整理的代码片段.@H_301_0@编程之家小编现在分享给大家,也给大家做个参考. 说明骑士旅游(Knight tour)在十八世 ...

  4. 骑士旅行问题(骑士走棋盘)

    问题描述:一个骑士在棋盘中,给予其一个初始位置,求其是否能够走完整个棋盘. 骑士的走法和中国象棋的马走法相同,在前进过程中,骑士在其落足过的地方不能再次落足. 代码如下: //骑士走棋盘问题,骑士的走 ...

  5. 骑士周游算法 c语言_C语言经典算法04--骑士走棋盘(骑士旅游:Knight tour)

    说明:骑士旅游(Knight tour)在十八世纪初倍受数学家与拼图迷的注意,它什么时候被提出已不可考,骑士的走法为西洋棋的走法,骑士可以由任一个位置出发,它要如何走完[所有的位置? 解法:骑士的走法 ...

  6. java编写类骑士游历_[基于Java的骑士游历问题的预见算法]骑士游历问题

    摘要:骑士游历问题是经典的NP问题.在骑士游历问题常规算法的基础上,提出一个新的算法――预见算法,用Java实现该算法,提高程序的运行效率. 关键词:骑士游历:预见:Java算法 1 骑士游历问题 在 ...

  7. 用java写的马踏棋盘算法

    用java写的马踏棋盘算法 将马随机放在国际象棋的8×8棋盘Board[0-7][0-7]的某个方格中,马按走棋规则进行移动.要求每个方格只进入一次,走遍棋盘上全部64个方格. 代码 /* 马踏棋盘问 ...

  8. java 算法 排序算法_Java七种排序算法以及实现

    Java常见七种排序算法以及实现 最近学习一些排序算法,怕自己以后忘记就打算整理起来供自己复习 萌新一枚学习Java没多久,以下仅供参考.如有错误希望大佬指正,欢迎大家在评论区交流探讨. 1.冒泡排序 ...

  9. 刷题 BFS 广度优先算法 : 大胖子走迷宫 (python, java)

    刷题 BFS 广度优先算法 : 大胖子走迷宫 (python, java) https://www.lanqiao.cn/problems/234/learning/ http://lx.lanqia ...

最新文章

  1. 又有多所高校延迟寒假开学
  2. 如何从JavaScript对象中删除项目[重复]
  3. MxGraph从入门到精通之1:运行HelloWorld示例程序
  4. 湊湊很好,但依旧“难撑”呷哺呷哺的野心
  5. 【Java代码】坐标系说明+WGS84\GCJ02\BD09坐标系转换工具+Java坐标系转换及验证源代码分享(粘贴可用)
  6. 注解@Component方式代替xml装配bean
  7. 只考计算机知识吗,计算机二级只考一门吗?计算机二级考什么?
  8. get online 免费注册一级.online后缀的域名
  9. LINQ to XML 编程基础
  10. Spring消息之STOMP
  11. 将ibatis.net中定义的statement转换为实际的sql语句
  12. vue导入音乐_苹果vue怎么导入音乐
  13. 《2019测试面试题-上海悠悠.pdf》
  14. opencms mysql_[转]OpenCms for MySql 安装图解
  15. Win11控制面板里没有高清音频管理器怎么办?
  16. ML之RL:强化学习Reinforcement Learning的简介、应用、经典案例、学习资源之详细攻略
  17. Python与数据库之学员管理系统
  18. Java程序员进阶架构师的五个阶段,你到了哪各阶段?
  19. 列表解析(值得学习)
  20. LeetCode42题,单调栈、构造法、two pointers,这道Hard题的解法这么多?

热门文章

  1. 碳纳米管修饰金电极|壳聚糖共价接枝碳纳米管复合材料|碳纳米管/二氧化钛/壳聚糖薄膜(CNTs/TiO2/CS)|血红蛋白在碳纳米管的修饰
  2. 运算重载符号(C++)
  3. 服务器的速度没有虚拟主机快,云服务器没有虚拟主机快
  4. 这是一首简单的小情歌
  5. linux进程的通信文件映射,Linux进程间通信 -- mmap函数的使用
  6. Vue一个案例引发「内容分发slot」的最全总结
  7. 找单身狗版本2(有两个单身狗)
  8. ffmpeg —— v4l2录制h264视频文件(边采集边转码)
  9. ventura 双系统win之间切换蓝牙设备自动连接教程
  10. 计算机组装与维修选择题大全,计算机组装与维修试题精选答案.跪求.