当前位置: 首页 > news >正文

数据结构--5.2马踏棋盘算法(骑士周游问题)

题目渊源:

        马踏棋盘问题(又称骑士周游问题或骑士漫游问题)是算法设计的经典问题之一。

题目要求:

        国际象棋的棋盘为8*8的方格棋盘,现将“马”放在任意指定的方格中,按照“马”走棋的规则将“马”进行移动。要求每个方格只能进入一次,最终使得“马”走遍棋盘64个方格。

        

#include <stdio.h>
#include <time.h>#define X 8
#define Y 8int chess[X][Y];//找到基于(x,y)位置的下一个可走的位置 
int nextxy(int *x,int *y,int count)
{switch(count){case 0:if(*x+2<=X-1 && *y-1>=0 && chess[*x+2][*y-1]==0){*y+=2;*y-=1;return 1;}break;case 1:if(*x+2<=X-1 && *y+1<=Y-1 && chess[*x+2][*y+1]==0 ){*x+=2;*y+=1;return 1;}break;case 2:if(*x+1<=X-1 && *y-2>=0 && chess[*x+1][*y-2]==0 ){*x=*x+1;*y=*y-2;return 1;}break;case 3:if(*x+1<=X-1 && *y+2<=Y-1 && chess[*x+1][*y+2]==0){*x = *x+1;*y= *y+2;return 1;}break;case 4:if(*x-2>=0  && *y-1>=0 && chess[*x-2][*y-1]==0){*x= *x-2;*y= *y+1;return 1;}break;case 5:if(*x-2>=0 && *y+1<=Y-1 && chess[*x-2][*y+1]==0 ){*x= *x-2;*y = *y+1;return 1;}break;case 6:if(*x-1>=0 && *y-2>=0 && chess[*x-1][*y-2]==0){*x = *x - 1;*y = *y - 2;return 1;}break;case 7:if(*x-1>=0 && *y+2<=Y-1 && chess[*x-1][*y+2]==0){*x = *x -1;*y = *y +2;return 1;}break;default:break;} return 0;
} void print()
{int i,j;for(i=0;i<X;i++){for(j=0;j<Y;j++){printf("%2d\t",chess[i][j]);}printf("\n");}printf("\n");
}//深度优先遍历棋盘
//(x,y)为位置坐标
//tag是标记变量
int TravelChessBoard(int x,int y,int tag)
{int x1= x,y1=y,count =0,flag =0;chess[x][y] = tag;if(x*Y == tag){//打印棋盘print();return 1; }//找到马的下一个可走的坐标(x1,y1)flag = nextxy(&x1,&y1,count);while(0==flag && count<7){count++;}while(flag){if(TravelChessBoard(x1,y1,tag+1)){return 1;}//出现意外,找到马的下一步可走坐标(x1,y1) x1=x;y1=y;count++;flag = nextxy(&x1,&y1,count);while(0==flag && count < 7){count++;flag = nextxy(&x1,&y1,count);}} if(0 == flag){chess[x][y] =0;} return 0;
} int main()
{int i,j;clock_t start,finish;start = clock();for(i=0;i<X;i++){for(j=0;j<Y;j++){chess[i][j]=0;}}if(TravelChessBoard(2,0,1)){printf("抱歉,马踏棋盘失败!\n");}finish = clock();printf("\n本次计算一共耗时:%f秒\n\n",(double)(finish - start)/CLOCKS_PER_SEC);return 0;
}

相关文章:

数据结构--5.2马踏棋盘算法(骑士周游问题)

题目渊源&#xff1a; 马踏棋盘问题&#xff08;又称骑士周游问题或骑士漫游问题&#xff09;是算法设计的经典问题之一。 题目要求&#xff1a; 国际象棋的棋盘为8*8的方格棋盘&#xff0c;现将“马”放在任意指定的方格中&#xff0c;按照“马”走棋的规则将“马”进行移动。…...

如何使用CSS实现一个响应式图片幻灯片(Responsive Image Slider)效果?

聚沙成塔每天进步一点点 ⭐ 专栏简介⭐ 响应式图片幻灯片⭐ HTML结构⭐ CSS样式⭐ JavaScript交互⭐ 写在最后 ⭐ 专栏简介 前端入门之旅&#xff1a;探索Web开发的奇妙世界 记得点击上方或者右侧链接订阅本专栏哦 几何带你启航前端之旅 欢迎来到前端入门之旅&#xff01;这个…...

Linux学习之lvm删除

umount /mnt/logicvolumntest卸载挂载。 lvremove /dev/vgname/my_lv可以删除逻辑卷&#xff0c;其中vgname是指定逻辑卷所在的卷组名称&#xff0c;my_lv是逻辑卷的名称。 注意&#xff1a;使用lvremove命令会永久删除逻辑卷和其中的数据&#xff0c;因此请在使用之前进行适当…...

bazel介绍以及其发展历史

简介 Bazel Google开源的&#xff0c;是一款与 Make、Maven 和 Gradle 类似的开源构建和测试工具。 它使用人类可读的高级构建语言。Bazel 支持多种语言的项目&#xff0c;可为多个平台构建输出。Bazel支持任意大小的构建目标&#xff0c;并支持跨多个代码库和大量用户的大型代…...

固定资产管理分析怎么写?

对企业内的固定资产进行全面的统计和分析&#xff0c;包括设备、装修、维修等方面的信息&#xff0c;有助于企业进行资产管理和风险控制。  通过该软件&#xff0c;用户可以实现对资产的跟踪和管理&#xff0c;如实时监测设备的使用情况&#xff0c;提高设备利用率和维护效率…...

【项目源码】一套基于springboot+Uniapp框架开发的智慧医院3D人体导诊系统源码

智慧医院3D人体导诊系统源码 开发语言&#xff1a;java 开发工具&#xff1a;IDEA 前端框架&#xff1a;Uniapp 后端框架&#xff1a;springboot 数 据 库&#xff1a;mysql 移 动 端&#xff1a;微信小程序、H5 “智慧导诊”以人工智能手段为依托&#xff0c;为…...

可能的二分法 -- 二分图判定【DFS、BFS分别实现】

886. 可能的二分法 class PossibleBipartition:"""可能的二分法「其实考察的就是二分图的判定」用dfs和bfs 两种方法分别实现https://leetcode.cn/problems/possible-bipartition/"""def __init__(self):self.success Trueself.color []self.…...

六级翻译备考

classical 经典的 Chinese literature 中国文学 朝代dynasty 统治 rule 社会稳定 steady society 治理有序 orderly governance 伟大的greatest 时代 times或者periods 被人们描绘成人类历史上伴随着治理有序&#xff0c;社会稳定的最伟大的时代之一 more and more越来越多 …...

Vue框架--Vue中的数据绑定

Vue中有两种数据绑定的方式 1.单向数据绑定(v-band):数据只能够从data流向页面 2.双向数据绑定(v-model):数据不仅仅能够从data流向页面&#xff0c;也可以从页面流向data。 备注: 1.双向绑定一般都应用在表单类元素上。(如:input、select等有value属性值的标签上) 2.…...

Unity——热更新浅析

热更新的思想从本质上来讲&#xff0c;要考虑一些问题。例如&#xff0c;一个完整的游戏最多可以有多大比例的资源通过网络加载&#xff1f;能否让尽可能多的资源通过网络加载&#xff1f; 通过网络加载有很多好处&#xff0c;不仅可以极大减小安装包的体积&#xff0c;而且有…...

IMPLEMENT_DYNCREATE的分析

一、介绍 IMPLEMENT_DYNCREATE 是一个宏&#xff08;macro&#xff09;&#xff0c;通常与DECLARE_DYNCREATE宏一起在MFC框架中使用。它的作用是为一个派生自 CObject 的MFC类提供运行时类型信息&#xff08;RTTI&#xff09;和对象的动态创建支持。 具体来说&#xff0c;IMP…...

Java实现根据短连接获取1688商品详情数据,1688淘口令接口,1688API接口封装方法

要通过1688的API获取商品详情数据&#xff0c;您可以使用1688开放平台提供的接口来实现。以下是一种使用Java编程语言实现的示例&#xff0c;展示如何通过1688开放平台API获取商品详情属性数据接口&#xff1a; 首先&#xff0c;确保您已注册成为1688开放平台的开发者&#xf…...

ABAP FICO 凭证替代 凭证校验

凭证校验 1.T-CODE--->GGX2--->GBLR-->ZRGGBR000 2.将程序RGGBR000 复制为ZRGGBR000 3.GGB0--》财务会计--》凭证抬头或者行项目维护检验规则 4.OB28 维护特定的公司代码和调用点和确认&#xff0c;活动等级设置为1 5.GGB4-->激活校验 凭证替代 1.T-CODE--->GG…...

项目验收有哪些流程?

验收流程 科技计划项目验收/课题验收测试服务的被测对象是国家重大专项、科研课题的软件成果物&#xff0c;可以是一个模块、软件或系统等&#xff0c;也可以是软件套件或软件原型等。测试范围主要来源于课题的合同书/可行吧报告/申报书中的技术指标要求。所出具的科技项目验收…...

C++,类的继承

一、继承的基本概念 继承使得C能够从已有的类派生出新的类&#xff0c;而派生类继承了原有类的特征&#xff0c;包括方法。被继承者称为父类或基类&#xff0c;继承者称为子类或派生类。 继承的目的&#xff1a; 实现代码的重用性建立父类和子类之间的联系在实现多态的时候&a…...

作业33333333

一、正向解析 在开启DNS服务之前先将防火墙关闭。 systemctl stop firewalld.service 开启DNS服务&#xff0c;需要开启端先进行安装主软件&#xff0c;以及配置包管理软件 配置包管理软件一般会跟随主软件一起安装&#xff0c;如果没有手动安装一次就可以了。 安装完成之后&…...

Spring Cloud--从零开始搭建微服务基础环境【二】

&#x1f600;前言 本篇博文是关于Spring Cloud–从零开始搭建微服务基础环境【二】&#xff0c;希望你能够喜欢 &#x1f3e0;个人主页&#xff1a;晨犀主页 &#x1f9d1;个人简介&#xff1a;大家好&#xff0c;我是晨犀&#xff0c;希望我的文章可以帮助到大家&#xff0c;…...

算法工程题(中序遍历)

* 题意说明&#xff1a; * 给定一个二叉树的根节点 root &#xff0c;返回 它的 中序 遍历 。 * * 示例 1&#xff1a; * 输入&#xff1a;root [1,null,2,3] * 输出&#xff1a;[1,3,2] * * 示例 2&#xff1a; * 输入&#xff1a;root [] * 输出&#xff1a;[] * *…...

jsch网页版ssh

使用依赖 implementation com.jcraft:jsch:0.1.55Server端代码 import com.jcraft.jsch.Channel; import com.jcraft.jsch.JSch; import com.jcraft.jsch.Session; import java.io.InputStream; import java.io.OutputStream; import java.util.concurrent.TimeUnit; import o…...

教程i.MX8MPlus开发板SPI转CAN操作

飞凌嵌入式OKMX8MP-C核心板有两路原生CAN总线&#xff0c;但用户在开发产品时可能需要用到更多的CAN&#xff0c;这该如何解决呢&#xff1f;今天小编将为大家介绍一种SPI转CAN的方法&#xff0c;供各位工程师小伙伴参考。 说明 OKMX8MP-C核心板有两路原生的SPI总线&#xff0c…...

树莓派超全系列教程文档--(61)树莓派摄像头高级使用方法

树莓派摄像头高级使用方法 配置通过调谐文件来调整相机行为 使用多个摄像头安装 libcam 和 rpicam-apps依赖关系开发包 文章来源&#xff1a; http://raspberry.dns8844.cn/documentation 原文网址 配置 大多数用例自动工作&#xff0c;无需更改相机配置。但是&#xff0c;一…...

unix/linux,sudo,其发展历程详细时间线、由来、历史背景

sudo 的诞生和演化,本身就是一部 Unix/Linux 系统管理哲学变迁的微缩史。来,让我们拨开时间的迷雾,一同探寻 sudo 那波澜壮阔(也颇为实用主义)的发展历程。 历史背景:su的时代与困境 ( 20 世纪 70 年代 - 80 年代初) 在 sudo 出现之前,Unix 系统管理员和需要特权操作的…...

Spring Boot+Neo4j知识图谱实战:3步搭建智能关系网络!

一、引言 在数据驱动的背景下&#xff0c;知识图谱凭借其高效的信息组织能力&#xff0c;正逐步成为各行业应用的关键技术。本文聚焦 Spring Boot与Neo4j图数据库的技术结合&#xff0c;探讨知识图谱开发的实现细节&#xff0c;帮助读者掌握该技术栈在实际项目中的落地方法。 …...

mysql已经安装,但是通过rpm -q 没有找mysql相关的已安装包

文章目录 现象&#xff1a;mysql已经安装&#xff0c;但是通过rpm -q 没有找mysql相关的已安装包遇到 rpm 命令找不到已经安装的 MySQL 包时&#xff0c;可能是因为以下几个原因&#xff1a;1.MySQL 不是通过 RPM 包安装的2.RPM 数据库损坏3.使用了不同的包名或路径4.使用其他包…...

Java数值运算常见陷阱与规避方法

整数除法中的舍入问题 问题现象 当开发者预期进行浮点除法却误用整数除法时,会出现小数部分被截断的情况。典型错误模式如下: void process(int value) {double half = value / 2; // 整数除法导致截断// 使用half变量 }此时...

Golang——6、指针和结构体

指针和结构体 1、指针1.1、指针地址和指针类型1.2、指针取值1.3、new和make 2、结构体2.1、type关键字的使用2.2、结构体的定义和初始化2.3、结构体方法和接收者2.4、给任意类型添加方法2.5、结构体的匿名字段2.6、嵌套结构体2.7、嵌套匿名结构体2.8、结构体的继承 3、结构体与…...

计算机基础知识解析:从应用到架构的全面拆解

目录 前言 1、 计算机的应用领域&#xff1a;无处不在的数字助手 2、 计算机的进化史&#xff1a;从算盘到量子计算 3、计算机的分类&#xff1a;不止 “台式机和笔记本” 4、计算机的组件&#xff1a;硬件与软件的协同 4.1 硬件&#xff1a;五大核心部件 4.2 软件&#…...

Qemu arm操作系统开发环境

使用qemu虚拟arm硬件比较合适。 步骤如下&#xff1a; 安装qemu apt install qemu-system安装aarch64-none-elf-gcc 需要手动下载&#xff0c;下载地址&#xff1a;https://developer.arm.com/-/media/Files/downloads/gnu/13.2.rel1/binrel/arm-gnu-toolchain-13.2.rel1-x…...

认识CMake并使用CMake构建自己的第一个项目

1.CMake的作用和优势 跨平台支持&#xff1a;CMake支持多种操作系统和编译器&#xff0c;使用同一份构建配置可以在不同的环境中使用 简化配置&#xff1a;通过CMakeLists.txt文件&#xff0c;用户可以定义项目结构、依赖项、编译选项等&#xff0c;无需手动编写复杂的构建脚本…...

MySQL的pymysql操作

本章是MySQL的最后一章&#xff0c;MySQL到此完结&#xff0c;下一站Hadoop&#xff01;&#xff01;&#xff01; 这章很简单&#xff0c;完整代码在最后&#xff0c;详细讲解之前python课程里面也有&#xff0c;感兴趣的可以往前找一下 一、查询操作 我们需要打开pycharm …...