1 //在半个中国象棋棋盘上,马在左下角(1,1)处,马走日字,
 2 //而且只能往右走...不能向左...可上可下...求从起点到(m, n)处有
 3 //几种不同的走法(函数的递归调用)
 4
 5 #include<stdio.h>
 6 #include<stdlib.h>
 7
 8 int horse(int x1,int y1,int x2,int y2);
 9 int main()
10 {
11     char ch;
12     while(ch != EOF)
13     {
14         int m,n;
15         printf("请输入目的地址,用英文逗号隔开,如2,3:\n");
16         if(scanf("%d,%d",&m,&n) < 2)
17             printf("输入有不全,请重新输入!\n");
18         else if(m>9||m<1||n>5||n<1)
19                 printf("输入有误,请重新输入!\n");
20             else
21                 printf("结果为:%d",horse(1,1,m,n));
22         printf("\n输入ctrl+z退出,任意键继续\n");
23         getchar();
24         ch = getchar();
25         system("cls");
26     }
27     return 0;
28 }
29
30 //走马的实现
31 int horse(int x1,int y1,int x2,int y2)
32 {
33     //在这个算法中,目的地不变,在变的一直是起点,递归有两个出口,一个返回0(表示找不到),一个返回1(表示找到)。
34     int result = 0;
35     if( x1 > x2 || x1==x2 && y1 != y2)     //x1 > x2 表示已经往左边走,
36         return 0;                        //x1==x2 && y1 != y2 表示已在同一竖线上,但横线不重合,注定走不到一起。
37     else if(x1==x2 && y1==y2)
38         return 1;
39     else
40     {
41         //每一个点有“四种”走法,每一个起点都递归调用。
42         //注意到x1只能 + ,因为只能往右走。
43         if(x1+2<=9 && y1+1<=5)
44             result += horse(x1+2,y1+1,x2,y2);
45         if(x1+1<=9 && y1+2<=5)
46             result += horse(x1+1,y1+2,x2,y2);
47         if(x1+2<=9 && y1-1>=1)
48             result += horse(x1+2,y1-1,x2,y2);
49         if(x1+1<=9 && y1-2>=1)
50             result += horse(x1+1,y1-2,x2,y2);
51         //所有递归调用回溯之后,得到一个总的result,即步数。
52         return result;
53     }
54 }

转载于:https://www.cnblogs.com/houjun/p/6507692.html

中国象棋马走日 — 递归相关推荐

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

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

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

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

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

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

  4. Bailian4123 马走日【DFS】

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

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

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

  6. 马走日(DFS深搜)

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

  7. 马走日的解法(dfs)

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

  8. 马走日 java实现

    马走日 问题描述: 在中国象棋里,马的走棋要遵循"马走日"的规则,在本题中,给定马的起始位置,以及一个目标位置,判定该马是否能够走到该位置,如果能走到,最少步数是多少.(假设棋盘上 ...

  9. 信息学奥赛一本通:1219.马走日

    信息学奥赛一本通:1219.马走日 1219:马走日 时间限制: 1000 ms 内存限制: 65536 KB 提交数: 7406 通过数: 3863 [题目描述] 马在中国象棋以日字形规则移动. 请 ...

  10. 【简洁,易懂程式】C - 马走日

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

最新文章

  1. 【Interfacenavigation】XML中的字体(27)
  2. 三层架构 || SpringMVC 和 Struts2 的优略分析
  3. hdfs user 连接_Python入门操作HDFS
  4. 最新最全的视觉Transformer教程!论文分析 + 逐行Coding,带你轻松玩转ViT
  5. 她把肥皂放在矿泉水瓶盖上,第二天大吃一惊...…
  6. android 实现仿QQ登录可编辑下拉菜单
  7. POJ - 3450 Corporate Identity(二分+后缀数组)
  8. linux http 分析工具,技术|httpstat:一个检查网站性能的 curl 统计分析工具
  9. JSP的隐含对象/隐藏对象/内置对象介绍
  10. IDEA中如何新建一个带有-P目录的项目
  11. [Leetcode][第93题][JAVA][复原IP地址][剪枝][回溯]
  12. MVC模式 与 Model2模型 介绍
  13. [导入]热烈祝贺实时数据库行业协会成立!
  14. 2020年Java学习计划祝大家新年快乐
  15. 微型计算机原理与接口技术第二版答案邹逢兴,清华大学出版社-图书详情-《微型计算机原理与接口技术教学辅导(第2版)》...
  16. html转换为pdf的笔顺,笔顺正确写法,很全面.pdf
  17. 使用深度学习和物理约束求解偏微分方程
  18. 只有英语四级和计算机二级,通过英语四级和计算机二级用英语怎么说
  19. GTX 1070Ti正式发布!iGame Vulcan X家族再添新成员
  20. 如何阅读论文?读论文的三个层次

热门文章

  1. CSDN调整图片大小
  2. 博士申请 | 香港大学计算机科学系黄超老师招收2022年入学全奖博士生
  3. 【Debug记录】Libtorch部署YOLO时cmake报错--symbol lookup error: ./test/test: undefined symbol: _ZN2at6detail1
  4. 计算机课程设计答辩评语,课程设计评语模板.doc
  5. 如何不用电脑安装ipa
  6. 笔记本打开计算机,笔记本打开黑屏怎么办_笔记本电脑开机黑屏的解决步骤-win7之家...
  7. 火影 超神V5笔记本键盘维修
  8. 阿里云历时13年,站上世界现代计算架构之巅
  9. 谷歌访问英文网站翻译为中文
  10. mysql中str_to_date函数和date_format函数和now函数