马踏棋盘c++

马踏棋盘c++

  • 题目
  • 回溯问题模型
    • 特征
    • 模型
  • 代码

题目

  • 马踏棋盘算法,即骑士周游问题。
  • 将马放在国际象棋的 8×8 棋盘的某个方格中,马按走棋规则(马走日字)进行移动。
  • 每个方格只进入一次,走遍棋盘上全部 64 个方格。

回溯问题模型

特征

  • 解组织成树的形式
  • 从根节点开始进行深度优先遍历
  • 访问节点时进行判断,是否符合条件,符合就继续,否则进行回溯,此节点后的都不用访问(与暴力算法的区别,降低算法复杂度)

模型

在这里插入图片描述

代码

  • 代码演示的是5*5的棋盘。
  • 递归的出口为步数k=棋盘数M*M。
  • 递归主函数就是对每一坐标的8种走法进行判断。符合条件就调用递归函数。
  • 然后回溯上一步。
  • map变量ma记录棋盘上的每一个坐标是否走过。没有走过的,将其坐标加入map中,成为键,值记录第几步。
#include<iostream>
#include<map>
#include<iomanip> //出输格式设定 
using namespace std;
struct Pos{//定义坐标点int x;int y;Pos(int x,int y){this->x=x;this->y=y;}
}; 
int count=0;//记录一共有多少种解法
void show(int M,map<Pos,int>& ma);
//马的8种走法
Pos delta[]={Pos(-1,2),Pos(-1,-2),Pos(1,2),Pos(1,-2),Pos(2,1),Pos(2,-1),Pos(-2,1),Pos(-2,-1)};
//运算符重载 
Pos operator+(Pos a,Pos b){return Pos(a.x+b.x,a.y+b.y);
}
//马走的步法是否有效,如果出了格子表示bad,即为true
bool outOfBounds(int M,Pos p){if(p.x<0 || p.x>= M) return true;if(p.y<0 || p.y>= M) return true;return false;
}
//自定义变量Pos需要用map,则须重载<,确保Pos能比较大小 
bool operator< (Pos a,Pos b){if(a.x != b.x) return a.x < b.x;return a.y < b.y;
}
//bool operator<(const Pos& p) const{
//	if(this->x !=p.x) return this->x < p.x;
//	return this->y < p.y;
//}
bool f(int M,map<Pos,int>& ma,Pos p,int k){if(k==M*M){++count;cout<< count<<endl;show(M,ma);return true;} 		for(int i=0;i<8;i++){Pos p1=p+delta[i];if(outOfBounds(M,p1)) continue;if(ma.count(p1)) continue;ma[p1] = k+1;f(M,ma,p1,k+1);ma.erase(p1);}return false;
}
void show(int M,map<Pos,int>& ma){for(int i=0;i<M;i++){for(int j=0;j<M;j++){cout <<setw(3)<<ma[Pos(i,j)];}cout<<endl;}cout<<"********************"<<endl;
}
void horse(int M){map<Pos,int> ma;Pos p(0,0);ma[p]=1;f(M,ma,p,1); 		
}
int main(){horse(5);cout<<"总共有:"<<count<<"种走法"; return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.xdnf.cn/news/145641.html

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

MySQL高阶1867-最大数量高于平均水平的订单

目录 题目 准备数据 分析数据 题目 您正在运行一个电子商务网站&#xff0c;该网站正在寻找不平衡的订单。不平衡订单的订单最大数量严格大于每个订单&#xff08;包括订单本身&#xff09;的平均数量。 订单的平均数量计算为&#xff08;订单中所有产品的总数量&#xff…

数商:数字时代的新认知

在数字时代&#xff0c;“数商” 概念兴起&#xff0c;代表着人们在该时代应具备的新认知与能力。 数商即数字商数&#xff0c;指个体在数字时代认知、理解、运用数字技术和数据的能力&#xff0c;以及进行有效决策、创新和合作的素养。其内涵包括数字认知能力、数据素养、数字…

计算机毕业论文题目之基于Web技术B/S结构的新生管理系统包含报道,寝室宿舍,缴费学费,数据统计分析汇总等功能的源代码下载

为了满足功能需求&#xff0c;我们将设计并实现一个基于Web技术的B/S架构下的新生管理系统。本系统旨在通过前端与后端分离的设计模式&#xff0c;为用户提供简洁、高效的交互体验&#xff0c;并确保数据的安全性和系统的可扩展性。下面将从系统架构、功能模块以及技术选型三个…

【练习13】字符串中找连续最长的数字串

链接&#xff1a;字符串中找出连续最长的数字串_牛客题霸_牛客网 (nowcoder.com) 原理分析&#xff1a;模拟双指针 为什么用到BufferedReader 和 InputStreamReader组合输入字符&#xff1f; 因为BufferedReader 内部维护了一个字符缓冲区&#xff0c;调用readLine()方法时&…

全网最全的软件测试八股文

&#x1f345; 点击文末小卡片&#xff0c;免费获取软件测试全套资料&#xff0c;资料在手&#xff0c;涨薪更快 1、B/S架构和C/S架构区别 B/S 只需要有操作系统和浏览器就行&#xff0c;可以实现跨平台&#xff0c;客户端零维护&#xff0c;维护成本低&#xff0c;但是个…

基于SpringBoot+Vue的剧本杀管理系统

作者&#xff1a;计算机学姐 开发技术&#xff1a;SpringBoot、SSM、Vue、MySQL、JSP、ElementUI、Python、小程序等&#xff0c;“文末源码”。 专栏推荐&#xff1a;前后端分离项目源码、SpringBoot项目源码、SSM项目源码 系统展示 【2025最新】基于JavaSpringBootVueMySQL的…

TI官方资源介绍和使用

该文章会同步发布在知乎和微信公众号&#xff08;雷达原理与系统&#xff09; TI毫米波雷达相关资源介绍 毫米波雷达 硬件 毫米波雷达SOC&#xff08;1642&#xff0c;1843, 1432&#xff0c;2944&#xff09; 收发器MMIC&#xff1a;1432&#xff0c;2243 评估(EVM)板 D…

5万字讲解大模型语言高效推理研究(清华综述)

1.1背景介绍 近年来&#xff0c;大语言模型&#xff08;Large Language Models, LLMs&#xff09;受到学术界和工业界的广泛关注&#xff0c;得益于其在各种语言生成任务上的出色表现&#xff0c;大语言模型推动了各种人工智能应用&#xff08;例如ChatGPT、Copilot等&#xf…

蘑菇云闲盒业务新手教程

闲盒业务是什么&#xff1f;​ 闲盒是针对小带宽和低配置设备&#xff0c;提供的流量变现业务&#xff0c;可以将用户家里的闲置设备和宽带提供给我们&#xff0c;我们将按您的流量情况&#xff0c;每天给您一笔收益。 闲盒业务优势&#xff1a;​ 带宽利用率高&#xff0c;收…

鸿蒙手势交互(三:组合手势)

三、组合手势 由多种单一手势组合而成&#xff0c;通过在GestureGroup中使用不同的GestureMode来声明该组合手势的类型&#xff0c;支持顺序识别、并行识别和互斥识别三种类型。 GestureGroup(mode:GestureMode, gesture:GestureType[]) //- mode&#xff1a;为GestureMode枚…

TCP报文格式

RFC9293协议规范&#xff0c;规定的TCP格式如图1&#xff0c; 对比RFC793规定的格式&#xff0c;控制位从6bit变成了8bit 图1&#xff0c;图片来源&#xff1a;datatracker.ietf.org 图2为&#xff0c;可对照的中文版TCP格式&#xff0c;中文版参照的是RFC793 图2 重点…

大腾智能3D协同平台通过华为云云软件认证

在数字化浪潮的推动下&#xff0c;工业软件不仅是研发和生产的核心工具&#xff0c;更是创新突破的基础&#xff0c;正成为推动工业领域数字化转型的关键力量。 近日&#xff0c;深圳市大腾信息技术有限公司凭借在技术创新与产品优化方面的卓越表现&#xff0c;再次迎来里程碑…

Linux——keepalived负载均衡

如何解决网站的高并发访问? 高并发: 响应缓慢 服务卡顿 服务器宕机 思路: 找性能瓶颈 定位单点 (监控工具)解决方案: 隔离 扩展 动静分离拆分数据库缓存队列负载均衡逻辑隔离 // 虚拟化技术 硬件虚拟化 //VMware EXSI Ovirt指令集虚拟化运行库虚拟化 // 容…

windows下用cmake编译腾讯云的对象存储COS的XML C++SDK

首先在腾讯云官网上下载sdk&#xff0c;网址及官方说明文档如下&#xff1a; 对象存储 快速入门-SDK 文档-文档中心-腾讯云 我下载解压之后的路径如下图&#xff1a; 下载完后就要编译了。 1.下载VS&#xff0c;我的开发环境是 visual studio 2019 2. 下载CMake&#xff…

RT-DETR改进策略:BackBone改进|Next-ViT主干赋能下的革命性改进

摘要 Next-ViT(下一代视觉Transformer)是专为解决传统ViT模型在工业部署中遇到的推理速度慢、计算复杂度高等问题而设计的。它巧妙地结合了高效的Next Convolution Block(NCB)和Next Transformer Block(NTB),通过创新的混合策略(NHS)堆叠这些模块,从而在各种视觉任务…

JAVA并发编程系列(9)CyclicBarrier循环屏障原理分析

拼多多2面&#xff0c;还是模拟拼团&#xff0c;要求用户拼团成功后&#xff0c;提交订单支付金额。 之前我们在系列(8)《CountDownLatch核心原理》&#xff0c;实现过拼团场景。但是CountDownLatch里调用countDown()方法后&#xff0c;线程还是可以继续执行后面的代码&#xf…

2024年华为认证热门的5个方向

华为认证是ICT领域内广受认可的专业资格认证体系&#xff0c;它为不同层次的ICT专业人士提供了多样化的认证路径。华为认证体系主要分为三个等级&#xff1a;HCIA&#xff08;华为认证ICT工程师&#xff09;、HCIP&#xff08;华为认证ICT高级工程师&#xff09;、HCIE&#xf…

HTML/CSS/JS学习笔记 Day6(CSS--C3 背景样式)

跟着该视频学习&#xff0c;记录笔记&#xff1a;【黑马程序员pink老师前端入门教程&#xff0c;零基础必看的h5(html5)css3移动端前端视频教程】https://www.bilibili.com/video/BV14J4114768?p12&vd_source04ee94ad3f2168d7d5252c857a2bf358 Day6 内容梳理&#xff1a;…

【永磁同步电机(PMSM)】 2. 数学模型

【永磁同步电机&#xff08;PMSM&#xff09;】 2. 数学模型 1. 模型假设和磁路电路分析1.1 模型假设1.2 磁路分析—磁链方程1.3 电路分析—电压方程1.4 机械分析—运动方程 2. 三相静止坐标系的数学模型2.1 电压方程2.2 磁链方程2.3 电磁转矩方程2.4 电机机械运动方程 3. 变换…

webpack4 target:“electron-renderer“ 打包加速配置

背景 昨天写得一篇Electron-vue asar 局部打包优化处理方案——绕开每次npm run build 超级慢的打包问题-CSDN博客文章浏览阅读754次&#xff0c;点赞19次&#xff0c;收藏11次。因为组员对于 Electron 打包过程存在比较迷糊的状态&#xff0c;且自己也没主动探索 Electron-vu…