国际象棋跳马程序(自编码研究)

2024-01-03 09:58

本文主要是介绍国际象棋跳马程序(自编码研究),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

把马随机放到8*8的一个棋盘里,按照马的行走规则,每个方格进入一次,走遍64个方格,将数字依次填入8*8个方格内,使用递归,思路很明显,但是怎么选择递归的走路问题,按照如下走,大约需要8^64  <> 6.2*10^57 计算机根本搞不定!!!!

我的算法:

int hourse_run(Node tmp)
{
        if ( hourse_run(Node(tmp.x+1,tmp.y+2)) )
            goto L;
        if ( hourse_run(Node(tmp.x+1,tmp.y-2)) )
            goto L;
        if ( hourse_run(Node(tmp.x-1,tmp.y+2)) )
            goto L;
        if ( hourse_run(Node(tmp.x-1,tmp.y-2)) )
            goto L;
        if ( hourse_run(Node(tmp.x+2,tmp.y+1)) )
            goto L;
        if ( hourse_run(Node(tmp.x-2,tmp.y+1)) )
            goto L;
        if ( hourse_run(Node(tmp.x+2,tmp.y-1)) )
            goto L;
        if ( hourse_run(Node(tmp.x-2,tmp.y-1)) )
            goto L;

网上搜的算法:

board[x][y]=step;
  int i,j; info dir[8];
  for(i=j=0;i<8;++i)
   if(x+dx[i]<0||y+dy[i]<0||x+dx[i]>=R||y+dy[i]>=C||board[x+dx[i]][y+dy[i]]) continue;
   else
   {
    dir[j].x=x+dx[i];dir[j].y=y+dy[i];
    dir[j].out=outlet(dir[j].x,dir[j].y);
    sort(dir,++j);
   }
  for(i=0;i<j;++i)
   if(search(dir[i].x,dir[i].y,step+1)) return true;
  board[x][y]=0;
  return false;

算法的精妙在于,让马优先按照边走,即优先让棋子的下一条的路最少的路走!!!!证明过程没有看懂:http://faculty.olin.edu/~sadams/DM/ktpaper.pdf;有看懂证明过程的可以给我留言

这篇关于国际象棋跳马程序(自编码研究)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/565326

相关文章

java程序远程debug原理与配置全过程

《java程序远程debug原理与配置全过程》文章介绍了Java远程调试的JPDA体系,包含JVMTI监控JVM、JDWP传输调试命令、JDI提供调试接口,通过-Xdebug、-Xrunjdwp参数配... 目录背景组成模块间联系IBM对三个模块的详细介绍编程使用总结背景日常工作中,每个程序员都会遇到bu

uni-app小程序项目中实现前端图片压缩实现方式(附详细代码)

《uni-app小程序项目中实现前端图片压缩实现方式(附详细代码)》在uni-app开发中,文件上传和图片处理是很常见的需求,但也经常会遇到各种问题,下面:本文主要介绍uni-app小程序项目中实... 目录方式一:使用<canvas>实现图片压缩(推荐,兼容性好)示例代码(小程序平台):方式二:使用uni

Python动态处理文件编码的完整指南

《Python动态处理文件编码的完整指南》在Python文件处理的高级应用中,我们经常会遇到需要动态处理文件编码的场景,本文将深入探讨Python中动态处理文件编码的技术,有需要的小伙伴可以了解下... 目录引言一、理解python的文件编码体系1.1 Python的IO层次结构1.2 编码问题的常见场景二

Java中字符编码问题的解决方法详解

《Java中字符编码问题的解决方法详解》在日常Java开发中,字符编码问题是一个非常常见却又特别容易踩坑的地方,这篇文章就带你一步一步看清楚字符编码的来龙去脉,并结合可运行的代码,看看如何在Java项... 目录前言背景:为什么会出现编码问题常见场景分析控制台输出乱码文件读写乱码数据库存取乱码解决方案统一使

Java实现字节字符转bcd编码

《Java实现字节字符转bcd编码》BCD是一种将十进制数字编码为二进制的表示方式,常用于数字显示和存储,本文将介绍如何在Java中实现字节字符转BCD码的过程,需要的小伙伴可以了解下... 目录前言BCD码是什么Java实现字节转bcd编码方法补充总结前言BCD码(Binary-Coded Decima

python获取指定名字的程序的文件路径的两种方法

《python获取指定名字的程序的文件路径的两种方法》本文主要介绍了python获取指定名字的程序的文件路径的两种方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要... 最近在做项目,需要用到给定一个程序名字就可以自动获取到这个程序在Windows系统下的绝对路径,以下

Java 中编码与解码的具体实现方法

《Java中编码与解码的具体实现方法》在Java中,字符编码与解码是处理数据的重要组成部分,正确的编码和解码可以确保字符数据在存储、传输、读取时不会出现乱码,本文将详细介绍Java中字符编码与解码的... 目录Java 中编码与解码的实现详解1. 什么是字符编码与解码?1.1 字符编码(Encoding)1

基于Python编写自动化邮件发送程序(进阶版)

《基于Python编写自动化邮件发送程序(进阶版)》在数字化时代,自动化邮件发送功能已成为企业和个人提升工作效率的重要工具,本文将使用Python编写一个简单的自动化邮件发送程序,希望对大家有所帮助... 目录理解SMTP协议基础配置开发环境构建邮件发送函数核心逻辑实现完整发送流程添加附件支持功能实现htm

C#控制台程序同步调用WebApi实现方式

《C#控制台程序同步调用WebApi实现方式》控制台程序作为Job时,需同步调用WebApi以确保获取返回结果后执行后续操作,否则会引发TaskCanceledException异常,同步处理可避免异... 目录同步调用WebApi方法Cls001类里面的写法总结控制台程序一般当作Job使用,有时候需要控制

golang程序打包成脚本部署到Linux系统方式

《golang程序打包成脚本部署到Linux系统方式》Golang程序通过本地编译(设置GOOS为linux生成无后缀二进制文件),上传至Linux服务器后赋权执行,使用nohup命令实现后台运行,完... 目录本地编译golang程序上传Golang二进制文件到linux服务器总结本地编译Golang程序