【算法】回溯法——马的遍历问题(C语言)

使用回溯法解决棋盘上马的全路径遍历问题,通过二维数组记录棋盘状态,利用八个方向的拓展进行深度优先搜索,确保每个点仅访问一次。代码附带详细注释,展示具体实现过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

题目: 在中国象棋中,马只能走“日” 字。现有一5*4棋盘,马从位置(x,y)处出发,把棋盘的每一格都走一次,且只走一次。找出所有路径。

思路:
棋盘坐标

用二维数组a[6][5]存储棋盘每一点,其值代表该点的遍历顺序,数组下标对应棋盘点的坐标。

对于棋盘上一点A(x,y)有八个拓展方向,即
A1(x+1,y+2)A2(x+2,y+1)A3(x+2,y-1)A4(x+1,y-2)
A5(x-1,y-2)A6(x-2,y-1)A7(x-2,y+1)A8(x-1,y+2)
用数组 fx[8] = { 1,2,2,1,-1,-2,-2,-1 } 和 fy[8] = { 2,1,-1,-2,-2,-1,1,2 } 来模拟马走日时下标的变化。

搜索过程从起始点(x,y)出发,按深度优先原则,从8个方向中寻找一个可以走的点,直到走过棋盘上所有点。

完整代码+注释

# include<stdio.h>

int dep, x, y, count;							
//dep为搜索的深度即已遍历的点数,(x,y)为初始坐标,count用于统计走法个数
int fx[8] = {
    1,2,2,1,-1,-2,-2,-1 };
int fy[8] = {
    2,1,-1,-2,-2,-1
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值