广告
返回顶部
首页 > 资讯 > 后端开发 > Python >Java实现马踏棋盘算法
  • 551
分享到

Java实现马踏棋盘算法

2024-04-02 19:04:59 551人浏览 薄情痞子

Python 官方文档:入门教程 => 点击学习

摘要

本文实例为大家分享了Java实现马踏棋盘的具体代码,供大家参考,具体内容如下 马在某个点最多可能有8种走法,用递归和回溯实现。 注:代码中,查找下一个可走坐标是从右下第一个开始的,也

本文实例为大家分享了Java实现马踏棋盘的具体代码,供大家参考,具体内容如下

马在某个点最多可能有8种走法,用递归和回溯实现。

注:代码中,查找下一个可走坐标是从右下第一个开始的,也就是图中的4。可以通过修改a,b...h的值来改变顺序。

代码:


public class HorseStep {
    
    public static int X = 8;
    public static int Y = 8;
    
    public static int returnCount = 0;
    
    
    public static int chess[][] = new int[X][Y];
    
    
    
    public static int nextxy(XY xy,int count){
        
        final int a=0,
                b=1,
                c=2,
                d=3,
                e=4,
                f=5,
                g=6,
                h=7;
        
        int x = xy.getX();
        int y = xy.getY();
        
        int returnInt = 0;
        
        switch (count) {
        
//        从以x,y为轴心的 右下 开始
        
        case a:
            if( x+2<=X-1 && y+1<=Y-1 && chess[y+1][x+2]==0){
                x +=2;
                y +=1;
                returnInt = 1;
            }
            
            break;
            
        case b:
            if( x+1<=X-1 && y+2<=Y-1 && chess[y+2][x+1]==0){
                x +=1;
                y +=2;
                returnInt = 1;
            }
            
            break;
            
        case c:
            if( x-1>=0 && y+2<=Y-1 && chess[y+2][x-1]==0){
                x -=1;
                y +=2;
                returnInt = 1;
            }
            
            break;
            
        case d:
            if( x-2>=0 && y+1<=Y-1 && chess[y+1][x-2]==0){
                x -=2;
                y +=1;
                returnInt = 1;
            }
            
            break;
        
        case e:
            if( x-2>=0 && y-1>=0 && chess[y-1][x-2]==0){
                x -=2;
                y -=1;
                returnInt = 1;
            }
            
            break;
            
        case f:
            if( x-1>=0 && y-2>=0 && chess[y-2][x-1]==0){
                x -=1;
                y -=2;
                returnInt = 1;
            }
            
            break;
            
        case g:
            if( x+1<=X-1 && y-2>=0 && chess[y-2][x+1]==0){
                x +=1;
                y -=2;
                returnInt = 1;
            }
            
            break;
            
        case h:
            if( x+2<=X-1 && y-1>=0 && chess[y-1][x+2]==0){
                x +=2;
                y -=1;
                
                returnInt = 1;
            }
            break;
            
        default:
            break;
        }
        
        if(returnInt == 1){
            xy.setX(x);
            xy.setY(y);
            
            return 1;
        }
 
        return 0;
    }
    
    
    public static void print(){
        for(int i=0;i<X;i++){
            for(int j=0;j<Y;j++){
                
                if(chess[i][j]<10)
                    System.out.print(chess[i][j]+"  ");
                else
                    System.out.print(chess[i][j]+" ");
                
            }
            System.out.println();
        }
        
    }
    
    
    public static int TravelChessBoard(XY xy,int tag){
        
//        马在某个点有八种可能的方向,用来约束查找小于八种的变量
        Integer count = 0;
        
//        马所在位置是否可以再跳向下一个位置,0有,1无(条件:1,不出边界,2.没有走过)
        int haveNextXy = 0;
        
        int x = xy.getX();
        int y = xy.getY();
        
//        x是横轴,y是竖轴,左上角为0,0点,往右和往下递增
        chess[y][x] = tag;
        
//        最后一步,递归的终止条件
        if(X*Y == tag){
//            打印棋盘
            print();
            return 1;
        }
        
//        找到马的下一个可走坐标(x1,y1),如果找到为1,否则为0.
        haveNextXy = nextxy(xy, count);
        
        while( 0==haveNextXy && count<7){
            count ++;
            haveNextXy = nextxy(xy, count);
        }
        
        while(haveNextXy==1){
            if(TravelChessBoard(xy, tag+1)==1){
                return 1;
            }
            
//            回退后,把当前点也设置为回退后的位置
            xy.setX(x);
            xy.setY(y);
            
            count++;
            
//            找到马的下一个可走坐标(x1,y1),如果找到flag=1,否则为0.
            haveNextXy = nextxy(xy, count);
            
            while( 0==haveNextXy && count<7){
                count ++;
                haveNextXy = nextxy(xy, count);
            }
        }
        
//        回退
        if(haveNextXy==0){
            chess[y][x]=0;
            returnCount++;
        }
        
        return 0 ;
    }
    
    public static void main(String[] args) {
        long begin = System.currentTimeMillis();
        
//        马所在位置的坐标,x是横轴,y是竖轴,左上角为0,0点,往右和往下递增
        XY xy = new XY();
        xy.setX(1);
        xy.setY(0);
        
        if(TravelChessBoard(xy, 1)==0){
            System.out.println("马踏棋盘失败");
        }
        
        long time = System.currentTimeMillis()-begin;
        
        System.out.println("耗时"+time+"毫秒");
        System.out.println(returnCount);
    }
    
}
 
 
class XY{
    private int x;
    private int y;
    public int getX() {
        return x;
    }
    public void setX(int x) {
        this.x = x;
    }
    public int getY() {
        return y;
    }
    public void setY(int y) {
        this.y = y;
    }
    
    
}

结果:

如果从(0,0)开始的话

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持编程网。

--结束END--

本文标题: Java实现马踏棋盘算法

本文链接: https://www.lsjlt.com/news/139136.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • Java实现马踏棋盘算法
    本文实例为大家分享了Java实现马踏棋盘的具体代码,供大家参考,具体内容如下 马在某个点最多可能有8种走法,用递归和回溯实现。 注:代码中,查找下一个可走坐标是从右下第一个开始的,也...
    99+
    2022-11-13
  • java实现马踏棋盘的算法
    本文实例为大家分享了java实现马踏棋盘的具体代码,供大家参考,具体内容如下 马踏棋盘算法介绍 8X8棋盘,马走日字,要求每个方格只进入一次,走遍棋盘上全部64个方格。 代码: p...
    99+
    2022-11-13
  • java怎么实现马踏棋盘算法
    本篇内容介绍了“java怎么实现马踏棋盘算法”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!马踏棋盘或骑士周游问题马踏棋盘算法也被称为骑士周游...
    99+
    2023-06-29
  • C/C++实现马踏棋盘算法
    本文实例为大家分享了C/C++实现马踏棋盘的具体代码,供大家参考,具体内容如下 问题描述:将马随机放在国际象棋的8×8棋盘Board[0~7][0~7]的某个方格中,马按...
    99+
    2022-11-13
  • 基于Java实现马踏棋盘游戏算法
    马踏棋盘很好实现,但有时运行起来特别慢,还可能出不来结果,最常用的就是深度优先遍历+回溯,相信大家都学过数据结构,对图的深度遍历都有了解,下面就是代码的实现,如果对代码理解有困难,可...
    99+
    2022-11-13
  • C++贪心算法实现马踏棋盘
    本文实例为大家分享了C++贪心算法实现马踏棋盘的具体代码,供大家参考,具体内容如下 算法实现流程: 步骤1:初始化马的位置(结构体horse {x, y}) 步骤2:确定马从当前点...
    99+
    2022-11-13
  • java如何实现马踏棋盘
    这篇文章给大家分享的是有关java如何实现马踏棋盘的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。具体内容如下马踏棋盘很好实现,但有时运行起来特别慢,还可能出不来结果,在这里要用到贪心算法来优化,即找出最难走的路径...
    99+
    2023-06-29
  • java实现马踏棋盘游戏
    用java实现马踏棋盘游戏算法,供大家参考,具体内容如下 在4399小游戏中有这样一个游戏 这是代码实现 package com.HorseChess; import java....
    99+
    2022-11-13
  • java实现马踏棋盘算法(骑士周游问题)
    骑士周游问题 在8x8的国际棋盘上,按照马走日的规则,验证是否能够走遍棋盘。 解题思路 1、创建棋盘 chessBoard,是一个二维数组。2、将当前位置设置为已经访问,然后根据当...
    99+
    2022-11-13
  • java学习笔记之马踏棋盘算法
    马踏棋盘或骑士周游问题 1、马踏棋盘算法也被称为骑士周游问题2、将马随机放在国际象棋的 8×8 棋盘 Board[0~7][0~7]的某个方格中,马按走棋规则(马走日字)...
    99+
    2022-11-13
  • C++算法设计之马踏棋盘的实现
    本文实例为大家分享了C++算法设计之马踏棋盘的具体代码,供大家参考,具体内容如下 (一)马踏棋盘经典算法描述:   (1)马踏棋盘是经典的程序设计问题之一,主要的解决方案有...
    99+
    2022-11-13
  • java数据结构和算法之马踏棋盘算法
    本文实例为大家分享了java实现算法之马踏棋盘的具体代码,供大家参考,具体内容如下 一、马踏棋盘算法介绍 马踏棋盘算法也被称为骑士周游问题将马随机放在国际象棋的8×8棋盘...
    99+
    2022-11-13
  • java数据结构与算法之马踏棋盘
    本文实例为大家分享了java数据结构与算法之马踏棋盘的具体代码,供大家参考,具体内容如下 马踏棋盘算法也被称为骑士周游问题将马随机放在过期象棋的8x8棋盘的某个方格中,马按走棋规则进...
    99+
    2022-11-13
  • 如何使用C/C++实现马踏棋盘算法
    这篇文章主要介绍如何使用C/C++实现马踏棋盘算法,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!具体内容如下问题描述:将马随机放在国际象棋的8&times;8棋盘Board[0~7][0~7]的某个方格中,马...
    99+
    2023-06-29
  • java实现马踏棋盘的完整版
    本文实例为大家分享了java实现马踏棋盘的具体代码,供大家参考,具体内容如下 马踏棋盘很好实现,但有时运行起来特别慢,还可能出不来结果,在这里要用到贪心算法来优化,即找出最难走的路径...
    99+
    2022-11-13
  • 如何使用java实现马踏棋盘
    这篇文章将为大家详细讲解有关如何使用java实现马踏棋盘,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。具体内容如下马踏棋盘算法也被称为骑士周游问题将马随机放在过期象棋的8x8棋盘的某个方格中,马按走棋规则...
    99+
    2023-06-29
  • Java实现马踏棋盘游戏算法的代码怎么写
    这篇文章主要介绍“Java实现马踏棋盘游戏算法的代码怎么写”,在日常操作中,相信很多人在Java实现马踏棋盘游戏算法的代码怎么写问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Java实现马踏棋盘游戏算法的代码...
    99+
    2023-06-29
  • C++基于栈的深搜算法实现马踏棋盘
    马踏棋盘(基于栈的深搜算法实现) 简单来说,从任意指定方格出发,为马寻找一条走遍棋盘每一格并且只经过一次的一条路径,这就是马踏棋盘的简单描述。 话不多说,代码如下,要是有什么不懂的地...
    99+
    2022-11-13
  • 如何使用java实现马踏棋盘游戏
    小编给大家分享一下如何使用java实现马踏棋盘游戏,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!具体内容如下在4399小游戏中有这样一个游戏这是代码实现packa...
    99+
    2023-06-29
  • C++实现马踏棋盘(骑士周游)
    马踏棋盘,用1枚马走遍棋盘。我用一个二维数组记录模拟的整个路径,x为列,y为行,以顺时针的方式寻找下一格,算法比较简单,就通过递归和循环回溯即可,就是如果是8*8的数组,最坏可能执行...
    99+
    2022-11-13
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作