C - 马走日

题目

马在中国象棋以日字形规则移动。

请编写一段程序,给定 n×m 大小的棋盘,以及马的初始位置 (x,y),要求不能重复经过棋盘上的同一个点,计算马可以有多少途径遍历棋盘上的所有点。

输入格式

第一行为整数 T(T<10),表示测试数据组数。
        每一组测试数据包含一行,为四个整数,分别为棋盘的大小以及初始位置坐标 n,m,x,y。(0≤x≤n−1,0≤y≤m−1,m<10,n<10)。

输出格式

每组测试数据包含一行,为一个整数,表示马能遍历棋盘的途径总数,0 为无法遍历一次。

Sample Input

1
5 4 0 0

Sample Output

32

思路

        主要思路就是把马所有可能的路线都举出来。

        首先要知道的是,象棋中的马一共有八个方向可以选择

所以每次深搜的时候就要把八个方向都考虑到。

其次是题目提到马不能重复经过棋盘上的同一个点,所以当马走过的步数等于该棋盘的格数时,该路线肯定是可行的。

代码

#include<iostream>
using namespace std;
int t, n, m, x, y, ans;
int way[8][2] = { {1,2},{-1,2}, {2,1}, {-2,1}, {1,-2}, {-1,-2}, {2,-1}, {-2,-1} };//方向数组
bool ok[15][15];//用于确定该点是否走过
void dfs(int x, int y, int sum)
{if (sum == n * m)//如果总走过的步数等于该棋盘的格数,那么这条路线肯定是解{++ans;return;}for (int i = 0; i < 8; ++i)//使用方向数组避免代码繁琐{int xt = x + way[i][0], yt = y + way[i][1];if (xt >= 0 && xt < n&&yt >= 0 && yt < m && !ok[xt][yt])//如果该方向马跳出了棋盘外或者该点已经走过了就代表此路线不通{ok[xt][yt] = 1;dfs(xt, yt, sum + 1);ok[xt][yt] = 0;}}return;
}
int main()
{cin >> t;while (t--){ans = 0;cin >> n >> m >> x >> y;ok[x][y] = 1;//注意初始点也算走过,不能重复再走了dfs(x, y, 1);//因为初始点也算一步,所以总步数从1开始计算cout << ans << endl;}return 0;
}

GDUT - 专题学习1 C - 马走日相关推荐

  1. 专题学习1 Cproblem—马走日

    题意 请编写一段程序,给定 n×m大小的棋盘,以及马的初始位置 (x,y),要求不能重复经过棋盘上的同一个点,计算马可以有多少途径遍历棋盘上的所有点. Sample Input 1 5 4 0 0 S ...

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

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

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

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

  4. 马走日程序Java_马走日什么意思

    中国象棋在中国有着三千多年的历史,在中国古代,象棋被列为士大夫们的修身之艺,属于琴棋书画四艺之一.现在则被视为是怡神益智的一种有益身心的活动. 中国象棋是由两人轮流走子,以"将死" ...

  5. Bailian4123 马走日【DFS】

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

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

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

  7. 马走日,象走田;车走直路炮翻山

    棋子种类 车(車)马(馬)象(相)士(仕)将(帅): 还有炮(砲)和卒(兵). 走法口诀 马走日,象走田: 车走直路炮翻山: 士走斜线护将边: 小卒一去不回还. 走法解读 马为骑兵,直走斜砍,故走日! ...

  8. 马走日(DFS深搜)

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

  9. 马走日的解法(dfs)

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

最新文章

  1. 深入分析Synchronized原理(阿里面试题)
  2. docker安装最新版Jenkins:拉取镜像/创建容器
  3. html5能实现网络游戏吗,kbengine + cocos2d_js实现html5网络游戏mmorpg(全套代码+资源)...
  4. Java——Socket通信原理
  5. Oracle数据库只读事务和无事务的区别
  6. vue 加载太慢_如何提高Vue项目首页的加载速度
  7. 在ubantu16.04系统下安装ros操作系统
  8. pacman+s+java_ArchLinux pacman安装openjdk
  9. 教你分割视频,用多个视频随机合并,添加音频
  10. SEO不能不知道的首页关键词策略
  11. 如何在H5页面中实现长按二维码关注微信公众号?
  12. RoundProgressBar(圆形进度条)
  13. 【Android】自制静音App,解决他人手机外放问题
  14. Java多线程面试题总结(常见多线程面试题)
  15. IT培训有靠谱的机构吗,长什么样的?
  16. flink 架构、概念介绍
  17. 计算机毕业设计之java+ssm校园视频监控系统
  18. 网站关键词优化应该先优化首页还是优化内页?
  19. 利用pandas整理订单,并根据地址对比进行分类
  20. 14 实例:自动轨迹绘制

热门文章

  1. win10 计算机组件,win10系统删除那些不必要组件的操作步骤
  2. VC中一个关于宏的使用问题 A2W W2A
  3. 基于MATLAB的图像去雾系统
  4. day07 资产泄露CMS识别Git监控SVNDS_Store备份
  5. 水库调度C语言,山区小流域电站雨情遥测及水库防洪调度系统.docx
  6. C语言左值和右值说明
  7. 有谁见过八股文的天花板?阿里P8看了也晒干了沉默
  8. 戮力同心,精诚协作 Stibo Systems(思迪博)和点春科技正式签署战略合作伙伴协议
  9. Skr-Eric的Mysql课堂(一)——Mysql的介绍和基本SQL命令
  10. 2022河南青训联赛第(三)场