递归求解(回溯法求解),列出所有的解:

主要注意对各种参数的定义不要弄混,细心表达各种变量,可以在棋盘中设置墙壁,便于debug的检查与分析,并确定各种方向(dx[8]={1,1,-1,-1,2,2,-2,-2},dy[8]={2,-2,2,-2,1,-1,1,-1};),一步步探索可行解,最后说明一点:写代码时一定要力求代码的高效性与可读性,不可将能运行作为最终目的。

以下主要构造了栈进行操作,本题可以作为一个深度了解并熟悉栈性质的题目实战。

运行代码如下:

using namespace std;
#include <iostream>
#include <iomanip>
const int StackInitSize = 30;
const int StackInc = 10;typedef struct position
{int x, y;
}SElemType;struct Maze
{int m, n;int b[9][9]={0};position start;
};struct SStack
{SElemType *base,*top;int stacksize;
};bool StackInit(SStack &S)
{S.base = new SElemType[StackInitSize];if(!S.base) return false;S.top=S.base;S.stacksize=StackInitSize;return true;
}bool Push(SStack &S,SElemType e)
{SElemType*base;if(S.top-S.base==S.stacksize){base=(SElemType*)realloc(S.base,(S.stacksize+StackInc)*sizeof(SElemType));if(!base) return false;S.base=base; S.top=S.base+S.stacksize;S.stacksize+=StackInc;}*S.top=e;S.top++;return true;
}bool DelTop(SStack &S)
{if(S.top==S.base){return false;}S.top--;return true;
}bool Pop(SStack &S,SElemType &e)
{if(S.top==S.base){return false;}S.top--;e=*S.top;return true;
}bool GetTop(SStack S,SElemType& e)
{if(S.top==S.base){return false;}e = *(S.top - 1);return true;
}void MazeInit(Maze &M,int m,int n)
{M.m=m;M.n=n;
}bool MazePath(Maze &M)
{const int dx[8]={1,1,-1,-1,2,2,-2,-2},dy[8]={2,-2,2,-2,1,-1,1,-1};int i,j,d,k;for(i=1;i<=M.m;i++){for(j=1;j<=M.n;i++){M.b[i][j]=0;}}position P,Q;bool pass,succ;SStack S;StackInit(S);MazeInit(M,5,5);M.start.x = 1; M.start.y = 1;Push(S,M.start);k=1;succ=false;while(GetTop(S,P)){pass=false;for(d=M.b[P.x][P.y]+1;d<=8;d++){Q.x = P.x+dx[d-1];Q.y = P.y+dy[d-1];if (Q.x >= 1 && Q.y>=1 && Q.x<=M.m && Q.y<= M.n && M.b[Q.x][Q.y]==0){pass=true;break;}}M.b[P.x][P.y]=d;if(pass){Push(S,Q);k++;if(k==M.m*M.n){succ=true;break;};}else{M.b[P.x][P.y]=0;DelTop(S);k--;}}if(!succ) return false;while (Pop(S,P)) M.b[P.x][P.y]=k--;return true;
}void shuchu(Maze M)
{for (int i = 1; i <= M.m ; i++){for (int j = 1; j <= M.n ; j++){cout<<setw(5)<<M.b[i][j];}cout << endl;}
}int main()
{Maze M;MazePath(M);shuchu(M);return 0;
}

马踏棋盘运行结果如下:

同样地,也可以根据其性质,改造成合适长宽的象踏棋盘,但万变不离其宗,原理均一致,弄懂了即可以不变应万变。

马踏棋盘问题(C++版)相关推荐

  1. 马踏棋盘(Java版)

    问题: 国际象棋的棋盘为8*8的方格棋盘.现将"马"放在任意指定的方格中,按照"马"走棋的规则将"马"进行移动.要求每个方格只能进入一次,最 ...

  2. 用贪心算法解决马踏棋盘问题

    用贪心算法解决马踏棋盘问题 参考文章: (1)用贪心算法解决马踏棋盘问题 (2)https://www.cnblogs.com/Allen-win/p/7095293.html 备忘一下.

  3. 数据结构——马踏棋盘题解(贪心算法)

    本文转自: https://blog.csdn.net/qq_41596568/article/details/83060317 数据结构--马踏棋盘题解(贪心算法) 使用循环建立棋盘与权值棋盘(权值 ...

  4. 残缺棋盘问题算法分析_javascript使用递归回溯算法和贪心算法解决马踏棋盘问题...

    马踏棋盘算法介绍和游戏演示 1.马踏棋盘算法也被称为骑士周游问题 2.将马随机放在国际象棋的8×8棋盘Board[0-7][0-7]的某个方格中,马按走棋规则(马走日字)进行移动.要求每个方格只进入一 ...

  5. java 马踏棋盘优化_我所知道的十大常用算法之马踏棋盘算法(深度搜索、贪心思想优化 )...

    前言需求 今天我们学习的是马踏棋盘算法,我们还是从一个场景里引入看看 马踏棋盘算法也被称为骑士周游问题 将马随机放在国际象棋的6×6棋盘Board0-5的某个方格中 提示:马按走棋规则(马走日字)进行 ...

  6. 马踏棋盘算法(骑士周游问题)

    要求: 国家棋盘为8*8的方格棋盘,将"马"放在任意指定方格中.最终让马走遍64个方格. 关于象棋中马的走法 如下图所示: 下面是代码: #include <stdio.h& ...

  7. python棋盘放米问题_Python基于回溯法子集树模板解决马踏棋盘问题示例

    本文实例讲述了Python基于回溯法子集树模板解决马踏棋盘问题.分享给大家供大家参考,具体如下: 问题 将马放到国际象棋的8*8棋盘board上的某个方格中,马按走棋规则进行移动,走遍棋盘上的64个方 ...

  8. 【算法】马踏棋盘算法 骑士走周游算法

    文章目录 1.概述 2.贪心优化 1.概述 马踏棋盘算法和八皇后问题很相似:[算法]八皇后问题 骑士周游问题的解决步骤和思路 创建棋盘chessBoard,是一个二维数组 将当前位置设置为已经访问,然 ...

  9. 剑指Offer_12_矩阵中的路径(参考问题:马踏棋盘)

    题目描述  请设计一个函数,用来判断在一个矩阵中是否存在一条包含某字符串所有字符的路径.路径可以从矩阵中的任意一个格子开始,每一步可以在矩阵中向左,向右,向上,向下移动一个格子.如果一条路径经过了矩阵 ...

最新文章

  1. 堆排序——HeapSort
  2. 2011年1月和2月blog汇总:Orchard、敏捷个人、英语
  3. 拷贝构造函数的参数类型必须是引用
  4. mysql myisam转innodb_Mysql MyISAM数据库批量转换表引擎为Innodb
  5. 企业IM优劣势对比调查 各有特点
  6. Fvwm-背景图片设置三法
  7. 构建全程电子商务,创新企业经营模式(2)
  8. 毕业一年,疫情之下的95后工作:有的退而求次,有的忐忑前行
  9. MySQL 创建索引
  10. css绘画三角形,实现一些图形
  11. 【NOIP2012】【Luogu1075】质因数分解(模拟)
  12. opencv常用函数整理(一)
  13. ACM HDU 2516 取石子游戏(博弈)
  14. java接口测试工具_接口模拟测试利器,moco server工具的介绍
  15. like语法 mysql_mysql中like语法拼接4种方式
  16. 西门子S7-200SMART PLC视频教程(百度网盘)
  17. Java实验输出希腊字母表
  18. 这几天阅读的shadowgun的几个shader
  19. PDF怎么打印?为什么有时选择打印没有反应?
  20. B-spline算法(B样条曲线)

热门文章

  1. 华为mate30pro和华为p40pro有什么区别
  2. 第44件事 用户运营的5个关键环节
  3. 采用Fuel Gauge可能出现的几种电量现象及解释
  4. 串口调试小节之五 串口参数设置查询
  5. Windows 11强势来袭,一文带你了解全部更新内容
  6. 荣耀手环6太带劲 大屏时代终来临
  7. 基于Php美妆化妆品商城购物网站
  8. 计算机专业对于未来的规划,对所学专业的认识及对未来的规划.doc
  9. 星星是怎么来的?—— CG短片《繁星》幕后分享
  10. GrabCut python实现