题目
假设国际象棋棋盘有5*5共25个格子。设计一个程序,使棋子从初始位置开始跳马,需要将棋盘的格子全部都走一遍,每个格子只允许走一次。

:总共有多少解。

思路
DFS:
将起点作为搜索的起点,然后枚举马的八个走向,由于不是每个马都有八个走向,所以每走一步就要判断有没有越界,如果没有,就将当前点做为新的起点,然后继续递归走下一步,并把走过的地方标记为true,直到走到无路可走就结束递归,并且步数等于24时意味着遍历了所有格子(以(0,0)为起点),方案数加1。

ps: 总共有25个格子,sign[0][0] == true,只剩下24个格子,所以等 steps == 24 时相当于遍历结束。

#include<iostream>
#include<algorithm>bool sign[5][5];
static int method = 0;
int dx[] = {-2,-2,-1,-1,1,1,2,2};
int dy[] = {1,-1,2,-2,2,-2,1,-1};bool check_boundary(int x, int y)
{if(sign[x][y] == true) //note1return false;if(x>=5 || x<0 || y<0 || y>=5)return false;return true;
}void dfs(int steps, int x, int y)
{if(steps == 24){method++;return;}// Judge boundary for(int i = 0; i <= 7; i++){int m = x + dx[i];int n = y + dy[i];if( check_boundary(m ,n) ){sign[m][n] = true; //mark: this grid has been covereddfs(steps+1, m, n);sign[m][n] = false;}}
}int main()
{sign[0][0] = true;dfs(0,0,0);std::cout <<"total methods:" << method << std::endl;
}

result:total methods --> 304

  • 分享一个coding时遇到的小bug,希望大家不要像我一样粗心!源码中 note1的位置应该是 sign[x][y] == true;而不是sign[x][y] = true;噢!

以下是这个bug的结果:

马走日 DFS c++ 算法解答相关推荐

  1. 算法提高课-搜索-DFS之搜索顺序-AcWing 1116. 马走日:dfs

    题目分析 来源:acwing 分析: dfs分两类,一类是内部搜索,不需要恢复现场:一类是外部搜索(以整个图作为状态),需要恢复现场.这里的马走日就是状态图,需要恢复现场. 理清dfs,需要画一个搜索 ...

  2. Bailian4123 马走日【DFS】

    4123:马走日 总时间限制: 1000ms 内存限制: 1024kB 描述 马在中国象棋以日字形规则移动. 请编写一段程序,给定n*m大小的棋盘,以及马的初始位置(x,y),要求不能重复经过棋盘上的 ...

  3. 马走日(DFS深搜)

    马走日 目录 马走日 题意描述:给多组数据,给棋盘的大小和马的初始位置,求有多少种方法让马走日全部走过棋盘,不能重复走棋盘的同一个点 解题思路:利用数组来对所有的棋盘上所有的点初始化表示未走过,把马的 ...

  4. 马走日的解法(dfs)

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

  5. 马走日问题(Java版)

    马走日问题(Java版) 问题描述 算法描述 参考代码 问题描述 给定 n*m 大小的棋盘,起点坐标(x, y),找出从起点开始,将棋盘所有位置走一遍,求总的方案数Sum. 限制条件:只能走日字型. ...

  6. 信息学奥赛一本通(1219:马走日)

    1219:马走日 时间限制: 1000 ms         内存限制: 65536 KB 提交数: 12078     通过数: 6316 [题目描述] 马在中国象棋以日字形规则移动. 请编写一段程 ...

  7. 【密码岛OJ】1753 马走日题解

    作为一名密码岛码农,出道深搜 马走日是一道典型的深搜题,主要找准方向再判断日字形就完了 上代码 第一次写题解 不是很熟练 马走日的主要思路就是先定义两个方向数组,然后开一个dfs 求累加和 如果属于日 ...

  8. GDUT - 专题学习1 C - 马走日

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

  9. 马走日(深搜 C++)

    马走日 总时间限制: 1000ms 内存限制: 1024kB 描述 马在中国象棋以日字形规则移动. 请编写一段程序,给定n*m大小的棋盘,以及马的初始位置(x,y),要求不能重复经过棋盘上的同一个点, ...

最新文章

  1. ef core mysql 字符集,EF Core 基础知识
  2. 分布式缓存系统之Memcached
  3. java总结:double取两位小数的多种方法
  4. LINUX任务(jobs)详解
  5. 手工给alv添加合计
  6. 11个实用的Apache .htaccess配置
  7. CentOS安装zip及用法
  8. 苹果系统安装python环境_Mac下安装Python虚拟环境Virtualenv
  9. 自己组装电脑配置清单2022 自己组装电脑需要哪些配件
  10. 【python】52周存钱法改进
  11. 在windows10上写自己的第一个python代码
  12. 【彻底学会】多级编号
  13. 输入一个英文星期的前两个字姆,输出中文星期
  14. Matplotlib——条形图_3、分组条形图_4、堆叠条形图
  15. C++ 定时每天十二点做某事
  16. 微信小程序wx.base64ToArrayBuffer调用,提示thirdScriptError atob failed;undefined Error: atob failed
  17. 数据结构与算法 试题与答案
  18. Cython的学习方法
  19. 飞鱼星方案助山东小城印象实现微信营销
  20. IE 浏览器中不能使remove删除节点的解决方法

热门文章

  1. 图算法之节点分类Node Classification
  2. 【达内课程】集合之ArrayList
  3. 【easyDL】数据集上传后不显示分类,一直提示无效文本
  4. 【大学生活】搞学习还是搞技术
  5. 用计算机玩反恐精英的男孩,玩CS的男人
  6. python随机生成列表_随机词生成器-Python
  7. 天道酬勤,专科出身的我,2年进入苏宁,5年跳槽阿里,我是怎么快速晋升的呢?
  8. 学习笔记(2):SEO优化——从入门到实战-资讯类网站的URL规则
  9. C++11多线程 内存屏障(fence/atomic_thread_fence)
  10. 2022年《深圳市新引进博士人才生活补贴工作实施办法》最新政策