马走日棋盘算法

程序员通勤双肩包,下单送全年 CSDN 会员 防泼水面料电脑包,保护笔记本电脑,背负轻便,下单再赠 Coding Plan,看技术干货、查文档、下载源码,一站式搞定学习需求 阅读详情

 

 

问题描述
在给定大小的方格状棋盘上, 将棋子”马”放在指定的起始位置 , 棋子”马” 的走子的规则为必须在棋盘上走”日”字; 从棋子”马”的起始位置开始, 搜索出一条可行的路径, 使得棋子”马”能走遍棋盘上的所有落子点, 而且每个落子点只能走一次;

例如: 棋盘大小为5*5 , 棋子马放的起始落子点为 ( 3 , 3 ) ; 算法需要搜索一条从位置( 3 , 3 ) 开始的一条包括从( 1 , 1 ) , ( 1 , 2 ) , ( 1 , 3 ) … ( 5 , 1 ) , ( 5 , 2 ) , ( 5 , 3 ) , ( 5 , 4 ) , ( 5 , 5 ) 总共25个可以落子的全部位置;


问题分析
通过上面的问题描述,我们对问题的内容有了正确的理解,接下来我们开始对问题进行具体细致的分析,以求找到解决问题的正确的可行的合理的方法;

首先我们需要在程序中用合适的数据结构表示在问题中出现的棋盘 , 棋子 , 棋子的走子过程 ; 接下来我们需要对核心问题进行分析, 即如何搜索一条可行的路径 , 搜索采取何种策略 , 搜索的过程如何表示 ;

对于一个大小为n*m大小的棋盘 , 棋子从当前位置( x , y ) 出发,可以到达的下一个位置( x’ , y’ ):

(1) ( x +1 , y +2 )
(2) ( x +1 , y –2 )
(3) ( x – 1, y +2 )
(4) ( x – 1, y – 2 )
(5) ( x +2, y +1)
(6) ( x +2, y – 1)
(7) ( x -2, y + 1)
(8) ( x -2, y – 1 )

限制条件:

1. 1 <= x’ <= n , 1 <= y’ <= m; ( n : 棋盘的高度 , m: 棋盘的宽度 );
2. ( x’ , y’ ) 必须是棋子记录表中没有包括的新位置;
3. 棋子走子过程记录表中没有包括棋盘上的所有可以落子的位置;


对这个过程不停迭代的过程也就是对解空间搜索的过程, 搜索直到棋子走子记录表中包括棋盘上的所有可以落子的位置 , 就搜索到了一条可行的路径,路径包括棋盘上的所有落子点;或者搜索完整个解空间,仍然找不到一条可行的解,则搜索失败;


下面我们举例来说明搜索的过程;

棋盘大小 : 5 * 5
棋子起始位置 : ( 3 , 3 )
搜索过程 :

(1) 从当前位置( 3 , 3 )

[算法]马走 题目描述: 在国际象棋中,法与中国象棋类似,即俗话说的“马走”,下图所示即国际象棋中每一步能到达的格子(箭头所指为每步到达位置)。 现有一200 * 200大小的国际象棋棋盘棋盘中仅有一个,给定的当前位置和目标位置,求出最少需要多少跳才能从当前位置到达目标位置。 输入格式:已有文件txt格式 文件里每一行有四个以空格分隔的整数,分别表示当前位置及目标位置的横、纵坐标(Xs... 阅读详情

相关推荐

马走(dfs c++)

在中国象棋以字形规则移动。请编写一段程序,给定 n∗m大小的棋盘,以及的初始位置 (x,y),要求不能重复经过棋盘上的同一个点,计算可以有多少途径遍历棋盘上的所有点。

weixin_61943114的博客 1096

关于马走棋盘搜索算法

实现马走的搜索算法,VC++6.0 和window XP系统下调试通过的

马走算法实战:用C++解决棋盘遍历问题的5个关键步骤

本文详细介绍了使用C++实现马走算法的5个关键步骤,包括问题建模、DFS回溯框架设计、优化策略与剪枝技巧、完整实现与边界处理以及进阶思考。通过深度优先搜索和回溯算法,解决棋盘遍历问题,特别适合编程竞赛和算法学习。

rgv2345678的博客 221

DFS解马走问题

问题描述 在n*n的棋盘中,只能""字。位置(0,0)出发,把棋盘的每一格都一次且只一次。找出所有路径。 5*5的棋盘上,有304种解。 问题分析 搜索过程是从(0,0)出发,按照深度优先的原则,从8个方向中尝试一个可以的点,直到尝试过所有的方向,棋盘上的所有点,得出所有的解。 马走问题可以看成是在层数为n*n的8叉树中,找出所有的解。 #i

京东放养的爬虫 3116

深入探究马走棋盘搜索算法:实战与优化

搜索算法是用于在图或树等数据结构中查找满足特定条件的节点的一类算法。在计算机科学中,搜索问题无处不在,比如在路径查找、符号处理、人工智能等领域都有应用。搜索算法根据搜索路径的不同,通常可以分为两类:深度优先搜索(DFS)和广度优先搜索(BFS)。深度优先搜索(DFS)是一种用于遍历或搜索树或图的算法。该算法沿着树的深度遍历树的节点,尽可能深地搜索树的分支。当节点v的所有邻接节点都已被探寻过,搜索将回溯到发现节点v的那条边的起始节点。

weixin_42593549的博客 812

马走:遍历棋盘算法的编程实践

图是由节点(顶点)和连接节点的边组成的数学结构。在图论中,图用于描述实体之间的关系,其中顶点表示实体,边则表示实体之间的关系或连接。图可以分为无向图和有向图:无向图:边没有方向,表示节点之间的无序关系。有向图:边有方向,表示节点间的有序关系,即边的方向性。此外,根据边是否有权重,图还可以分为加权图和非加权图:加权图:边具有权重,通常表示距离、成本等信息。非加权图:边的权重相等或不存在,通常只关注连接关系。

weixin_42589700的博客 918

深度解析马走问题:从搜索回溯到棋盘遍历的算法实践

本文深度解析了经典的棋盘遍历问题——马走,详细阐述了如何运用深度优先搜索与回溯算法解决该问题。文章从问题定义出发,逐步讲解了状态表示、方向数组、递归函数构建等核心实现步骤,并探讨了包括沃恩斯多夫规则在内的关键剪枝优化策略,旨在帮助读者透彻理解搜索回溯算法的精髓与实践技巧。

convnet3designer的博客 216

马走 回溯实现(不是最佳方案但能找出路径)

/* 马走棋盘算法              例如: 棋盘大小为5*5 , 棋子放的起始落子点为 ( 3 , 3 ) ; 算法需要搜索一条从 位置( 3 , 3 ) 开始的一条包括从(         1 , 1 ) , ( 1 , 2 ) , ( 1 , 3 ) … ( 5 , 1 ) ,  ( 5 , 2 ) , ( 5 , 3 ) ,         ( 5 , 4 )

浪迹天涯的专栏 1320

马走c++

摘要: 本文探讨了如何计算中国象棋中在给定棋盘上遍历所有点且不重复的路径数目。遵循字形移动规则,需从初始位置出发,覆盖全部棋盘点。通过深度优先搜索(DFS)算法,模拟的移动并记录合法路径。具体实现中,使用二维数组标记访问状态,递归探索八个移动方向,回溯时恢复状态。对于每个测试用例(棋盘尺寸n×m及初始坐标x,y),程序输出可行路径总数。示例中,5×4棋盘从(0,0)出发的遍历路径为32种。该方案适用于小规模棋盘(n,m≤5),确保高效性和正确性。

gyvfhv的博客 766

回溯法-马走

vjudge 马走 在中国象棋以字形规则移动。请编写一段程序,给定n*m大小的棋盘,以及的初始位置(x,y),要求不能重复经过棋盘上的同一个点,计算可以有多少途径遍历棋盘上的所有点。 Input 第一行为整数T(T < 10),表示测试数据组数。每一组测试数据包含一行,为四个整数,分别为棋盘的大小以及初始位置坐标n,m,x,y。(0<=x<=n-1,0<=y<=m-1, m < 6, n < 6) Output 每组测试数据包含一行,为一个整数,表示

qq_45718060的博客 466

马走问题(Java版)

这里写目录标题问题描述算法描述参考代码 问题描述 给定 n*m 大小的棋盘,起点坐标(x, y),找出从起点开始,将棋盘所有位置一遍,求总的方案数Sum. 限制条件:只能字型. 算法描述 我们都听过象棋中的马走田,对于某一位置的棋子,总有8个方向可以选择,只有字且不超越棋盘大小,即可! 方向设定 // 8个方向 int[] orient = {-1, 2, 1, -2, -1, -2, 1, 2, -1}; 添加标记数组 vis[][],标记某条路径(多叉树分支)的点,是否

全网粉丝30W+,CSDN、稀土掘金人工智能领域签约作者,人工智能、大模型、Python 爬虫,商务合作,请私信沟通。 1929

openjudge_2.5基本算法之搜索_8465:马走

每一组测试数据包含一行,为四个整数,分别为棋盘的大小以及初始位置坐标n,m,x,y。(0<=x<=n-1,0<=y<=m-1, m < 10, n < 10)请编写一段程序,给定n*m大小的棋盘,以及的初始位置(x,y),要求不能重复经过棋盘上的同一个点,计算可以有多少途径遍历棋盘上的所有点。j++)cout<<j<<“列\t”;每组测试数据包含一行,为一个整数,表示能遍历棋盘的途径总数,0为无法遍历一次。cout<<“地图”<<sx<<“,”<<sy<<endl;cout<<i<<“行\t”;

adam_life的博客 889

棋盘算法(骑士周游问题)——贪心算法优化

骑士周游问题 在8x8的国际棋盘上,按照马走的规则,验证是否能够棋盘。 解题思路 创建棋盘 chessBoard,是一个二维数组。 将当前位置设置为已经访问,然后根据当前位置计算儿还能哪些位置,并放入到一个集合中(ArrayList),最多有8个位置,每一步,就使用step+1。 遍历ArrayList中存放的所有位置,看看哪个可以通,如果通,就继续,不通,就回溯。 判...

lu_long的博客 1569

关于棋盘马走”字问题的回溯算法实现

<br />1. 回溯法基本思想 <br /><br />   回溯法是在包含问题的所有解得解空间树(或森林)中,按照深度优先的策略,从根结点出发搜索解空间树。 <br />算法搜索至解空间树的任一结点时,总是先判断该结点是否满足问题的约束条件。如果满足进入该子树,继续 <br />按照深度优先的策略进行搜索。否则,不去搜索以该结点为根的子树,而是逐层向其祖先结点回溯。 <br /><br />   回溯法在用来求解问题的所有解时,要回溯到根,且根结点的所有可行的子树都已被搜索遍才结束。而回溯法 <br /

goustzhu地盘 1万+

poj2488题(骑士以马走的方式棋盘)

A Knight’s Journey Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 40636 Accepted: 13807 DescriptionBackground The knight is getting bored of seeing the same black and white squares a

sinat_37848482的博客 1229
上一篇: Windows SDK笔记(三):定制控件消息处理函数
下一篇: MFC类库之根基-CObject浅析
flashsj
博客等级 码龄25年 1粉丝 13原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值