骑士周游问题 --- 递归解法 --- java代码
骑士游历:
定义了向量的数组M,行数组X,列数组Y, 棋盘plane,计数器count,走动步数step
需要注意的是,递归函数的进入前的验证,原先的想法是传入来时的方向参数,可是这样的想法被实践否定了,
从理论上看,一个棋子走向哪里是不受它的过去制约的,最近的过去也不例外,
详情请见:http://en.wikipedia.org/wiki/Knights_tour
代码如下:
/** * Created by kodoyang on 2014/5/3. */ public class KnightTour { private static final int[][] M= { {2, 1}, {1, 2}, {-1, 2}, {-2, 1}, {-2, -1}, {-1, -2}, {1, -2}, {2, -1} }; private static final int[] X = {0, 1, 2, 3, 4, 5, 6, 7}, Y = {0, 1, 2, 3, 4, 5, 6, 7}; private static final int[][] plane = new int[X.length][Y.length]; public final static void main(String[] args){ int[] O = {0, 0}; next(X[0], Y[0], 1); } private static int count = 0; private final static void next(final int x, final int y, final int step){ plane[x][y] = step; if(step == 64) print( ++count ); else { for(int i = 0; i < M.length; i++){ int[] v = M[i]; int _x = x + v[0], _y = y + v[1]; if (valid(_x, _y)) next(_x, _y, step + 1); } } plane[x][y] = 0; } private static final boolean valid(final int x, final int y){ boolean result = false; if(x >= X[0] && x <= X[7] && y >= Y[0] && y <= Y[7]){ result = plane[x][y] == 0; } return result; } private static final void print(int step){ System.out.println("---------------------------------- " + step + " ------"); for(int i = X[0]; i <= X[7]; ++i) { for (int j = Y[0]; j <= Y[7]; ++j) { System.out.print("\t" + plane[i][j]); } System.out.println(); } System.out.println("---------------------------------------------------"); } }
这里一共有26,534,728,821,064种结果,程序被我提前停掉了,运行结果如下:
---------------------------------- ------ --------------------------------------------------- ---------------------------------- ------ --------------------------------------------------- ---------------------------------- ------ --------------------------------------------------- ---------------------------------- ------ --------------------------------------------------- ---------------------------------- ------ --------------------------------------------------- ---------------------------------- ------ --------------------------------------------------- ---------------------------------- ------ --------------------------------------------------- ---------------------------------- ------ --------------------------------------------------- ---------------------------------- ------ --------------------------------------------------- ---------------------------------- ------ --------------------------------------------------- ---------------------------------- ------ --------------------------------------------------- ---------------------------------- ------ --------------------------------------------------- ---------------------------------- ------ --------------------------------------------------- ---------------------------------- ------ --------------------------------------------------- ---------------------------------- ------ --------------------------------------------------- ---------------------------------- ------ --------------------------------------------------- ---------------------------------- ------ --------------------------------------------------- ---------------------------------- ------ --------------------------------------------------- ---------------------------------- ------ --------------------------------------------------- ---------------------------------- ------ --------------------------------------------------- ---------------------------------- ------ --------------------------------------------------- ---------------------------------- ------ --------------------------------------------------- ---------------------------------- ------ --------------------------------------------------- ---------------------------------- ------ --------------------------------------------------- ---------------------------------- ------ --------------------------------------------------- ---------------------------------- ------ --------------------------------------------------- ---------------------------------- ------ --------------------------------------------------- ---------------------------------- ------ --------------------------------------------------- ---------------------------------- ------ --------------------------------------------------- ---------------------------------- ------ --------------------------------------------------- ---------------------------------- ------ --------------------------------------------------- ---------------------------------- ------ --------------------------------------------------- ---------------------------------- ------ --------------------------------------------------- ---------------------------------- ------ --------------------------------------------------- Process finished with exit code -
骑士周游问题 --- 递归解法 --- java代码的更多相关文章
- 比赛组队问题 --- 递归解法 --- java代码 --- 八皇后问题
两队比赛,甲队为A.B.C3人,乙队为X.Y.Z3人.已知A不和X比,C不和X.Z比,请编程序找出3队赛手名单 采用了与八皇后问题相似的解法,代码如下: 如有疑问请链接八皇后问题的解法:http:// ...
- 八皇后问题 --- 递归解法 --- java代码
八皇后问题是一个以国际象棋为背景的问题:如何能够在 8×8 的国际象棋棋盘上放置八个皇后,使得任何一个皇后都无法直接吃掉其他的皇后?为了达到此目的,任两个皇后都不能处于同一条横行.纵行或斜线上.八皇后 ...
- 骑士周游问题跳马问题C#实现(附带WPF工程代码)
骑士周游问题,也叫跳马问题. 问题描述: 将马随机放在国际象棋的8×8棋盘的某个方格中,马按走棋规则进行移动.要求每个方格只进入一次,走遍棋盘上全部64个方格. 代码要求: 1,可以任意选定马在棋盘上 ...
- 【数据结构与算法Python版学习笔记】图——骑士周游问题 深度优先搜索
骑士周游问题 概念 在一个国际象棋棋盘上, 一个棋子"马"(骑士) , 按照"马走日"的规则, 从一个格子出发, 要走遍所有棋盘格恰好一次.把一个这样的走棋序列 ...
- 数据结构笔记--二叉查找树概述以及java代码实现
一些概念: 二叉查找树的重要性质:对于树中的每一个节点X,它的左子树任一节点的值均小于X,右子树上任意节点的值均大于X. 二叉查找树是java的TreeSet和TreeMap类实现的基础. 由于树的递 ...
- 希尔排序及希尔排序java代码
原文链接:http://www.orlion.ga/193/ 由上图可看到希尔排序先约定一个间隔(图中是4),然后对0.4.8这个三个位置的数据进行插入排序,然后向右移一位对位置1.5.9进行插入排序 ...
- 四种java代码静态检查工具
[转载]常用 Java 静态代码分析工具的分析与比较 转载自 开源中国社区 http://www.oschina.net/question/129540_23043 1月16日厦门 OSC ...
- 常见的排序算法之Java代码解释
一 简要介绍 一般排序均值的是将一个已经无序的序列数据重新排列成有序的 常见的排序分为: 1 插入类排序 主要就是对于一个已经有序的序列中,插入一个新的记录.它包括:直接插入排序,折半插入排序和希尔排 ...
- 原生Java代码拷贝目录
拷贝.移动文件(夹),有三方包commons-io可以用,但是有时候有自己的需求,只能使用原生java代码,这时可以用以下几种方式进行拷贝: 1.使用系统命令(Linux)调用 此种方式对操作系统有要 ...
随机推荐
- UML系列02之UML类图(1)
类图介绍 类图,是UML(统一建模语言)中用于描述"类"以及"类与类"之间关系的示意图.它形象的描述出了系统的结构,帮助人们理解系统.类图是在"所有的 ...
- jboss5优化
1.调整JVM在bin.bat或bin/run.cfg文件里. -Xms设置堆的最小值:-Xmx设置堆的最大值:-XX:Newsize= 设置年轻代的最小值:-XX:MaxNewsize=设置年轻代的 ...
- 图像分类之特征学习ECCV-2010 Tutorial: Feature Learning for Image Classification
ECCV-2010 Tutorial: Feature Learning for Image Classification Organizers Kai Yu (NEC Laboratories Am ...
- Android之网络请求库
自己学习android也有一段时间了,在实际开发中,频繁的接触网络请求,而网络请求的方式很多,最常见的那么几个也就那么几个.本篇文章对常见的网络请求库进行一个总结. HttpUrlConnection ...
- 利用SOLR搭建企业搜索平台 之——solr配置solrconfig.xml
来源:http://blog.csdn.net/zx13525079024/article/details/25310781 solrconfig.xml配置文件主要定义了SOLR的一些处理规则,包括 ...
- Kobject结构体分析
kobject是组成设备device.驱动driver.总线bus.class的基本结构.如果把前者看成基类,则后者均为它的派生产物.device.driver.bus.class构成了设备模型,而k ...
- mmm hardware/libhardware_legacy/power/
android源码目录下的build/envsetup.sh文件,描述编译的命令 - m: Makes from the top of the tree. - mm: Buil ...
- 齐次坐标概念&&透视投影变换推导
http://daehgib.blog.163.com/blog/static/1861071422011579551134/ 透视投影是3D固定流水线的重要组成部分,是将相机空间中的点从视锥体(fr ...
- Oracle数据库之三
子查询 -- 就是在一个查询中包含多个select语句(一般就2个) select id,first_name,dept_id from s_emp; 想查询和Ben一个部门的员工的id,first_ ...
- document.body.innerHTML用jquery如何表示
$("body").html('XXXX'); //这个是赋值 $("body").html(); //这个是获取HTML的内容