用C语言解决棋盘上马遍历问题

本文介绍了如何使用C语言解决棋盘上马遍历问题。通过设立二维数组记录马在棋盘上的步骤,设定马的行走顺序,并采用贪婪法选择出口最少的位置。虽然某些起始位置可能导致无法找到解,但通过调整马的行走顺序可以找到解决方案。文章附带源代码,展示具体实现过程。
摘要由CSDN通过智能技术生成

题目三:棋盘上马遍历问题
(1)问题描述
在8*8方格的棋盘上,从任意指定的方格出发,为马寻找一条走遍棋盘每一个并且只能经过一次的一条路径。
(2)算法分析
如果用二维数组board[][]表示棋盘,其元素记录马经过该位置时的步骤号。另对马的各种可能的走法设定一个检索次序,确定了出发方格后首先要清盘,即将表示棋盘的二维数组每个元素都置0;第一步就是出发方格,主要是确定第二步到第六十四步。先找到马当前所在的各种可能的出口;该题中运用贪婪法多个出口中确定一个出口,选择下一个出口的贪婪标准是那些允许走的位置中选择下一个出口最少的那个位置,如马当前的位置在(i,j)只有三个出口,它们的位置是(i+2,j+1)、(i-2,j+1)和(i-1,j-2),如分别走到这三个位置,这三个位置又分别会有不同的出口,假定这三个位置的出口个数分别为4、2、3,则程序就选择让走向出口个数最少的(i-2,j+1)位置。该过程没有回溯,但对于某些开始位置实际上有解,而该算法不能找到解,对于这种情况,只要改变八种可能出口的选择顺序就能找到解。
数据分析
(3)源代码

#include<stdio.h>
#include<stdlib.h>
int chess[14][13];  //定义棋盘  
int CanPath[14][13][8];  //每个棋子的八个方向哪些可以走
typedef struct{                                            //棋盘的八个方向
int x,y;                  
}direction;
direction dir[8]={
  {
  2,1},{
  1,2},{-1,2},{-2,1},{-2,-1},{-1,-2},{
  1,-2},{
  2,-1}};  //马遍历的八个方向
//栈的设计(顺序到达的各点坐标,还要有从前一点到达本点的方向)
typedef struct{
    int x,y;                                        //马的走过位置
    int di;                                         //马走的方向
}pathnode;
typedef struct{
    pathnode pa[90];
    int top;
}path;                                             //顺序栈
void Init_Path(path *p)
{                                                 //初始化栈
    p->top=-1;
}
int Push_Path(path
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值