https://www.cnblogs.com/houjun/p/6507691.html

//在半个中国象棋棋盘上,马在左下角(1,1)处,马走日字,
//而且只能往右走...不能向左...可上可下...求从起点到(m, n)处有
//几种不同的走法(函数的递归调用)
//要求打印出每一种走法

#include<stdio.h>
#include<stdlib.h>

int counter = 0;
//一个点的结构
typedef struct Point
{
    int x;
    int y;
}Point;

//定义一个结构体保存路径
typedef struct Step
{
    int num;
    Point steps[9];
}Step;
//声明一个路径结构体全局变量,并初始化
Step trace = {-1,{1,1}};

//声明函数
void print();
int horse(int x1,int y1,int x2,int y2);

int main()
{
    char ch;
    while(ch != EOF)
    {
        int m,n;
        counter = 0;
        printf("请输入目的地址,用英文逗号隔开,如2,3:\n");
        if(scanf("%d,%d",&m,&n) < 2)
            printf("输入有不全,请重新输入!\n");
        else if(m>9||m<1||n>5||n<1)
                printf("输入有误,请重新输入!\n");
            else
                printf("共有%d种走法\n",horse(1,1,m,n));
        printf("\n输入ctrl+z退出,任意键继续\n");
        getchar();
        ch = getchar();
        system("cls");
    }
    return 0;
}

int horse(int x1,int y1,int x2,int y2)
{
    int result = 0;
    //创建并添加该点
    Point po = {x1,y1};
    trace.steps[++trace.num] = po;
    if(x2 < x1  || (x1==x2 && y1 != y2))
    {
        trace.num--;    //返回前,去除该点
        return 0;
    }
    
    if(x1 == x2 && y1 == y2)
    {
        counter++;
        print();
        trace.num--;    //返回前,去除该点
        return 1;
    }
    
    if(x1+1 <= 9 && y1+2 <= 5)
        result+=horse(x1+1,y1+2,x2,y2);
    if(x1+1 <= 9 && y1-2 >0)
        result+=horse(x1+1,y1-2,x2,y2);
    if(x1+2 <= 9 && y1+1 <= 5)
        result+=horse(x1+2,y1+1,x2,y2);
    if(x1+2 <= 9 && y1-1 > 0)
        result+=horse(x1+2,y1-1,x2,y2);

trace.num--;        //返回前,去除该点
    return result;
}

void print()
{
    int i;
    printf("第%d种走法为:",counter);
    for(i = 0;i <= trace.num;i++)
    {
        printf("[%d,%d] ",trace.steps[i].x,trace.steps[i].y);
    }
    printf("\n");
}

中国象棋马走日(要求打印每一种走法) — 递归相关推荐

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

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

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

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

  3. Bailian4123 马走日【DFS】

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

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

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

  5. 马走日(DFS深搜)

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

  6. 马走日的解法(dfs)

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

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

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

  8. 马走日 java实现

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

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

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

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

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

最新文章

  1. 提高你30%的设计效率的PPT快捷键
  2. [flask实践] 解决mysql数据库不支持中文的问题
  3. 每日一皮:无良商家,难怪头发越来越少了!
  4. openwrt satisfy_dependencies_for: Cannot satisfy the following dependencies for kmod: * 问题解决
  5. 每天一道LeetCode-----判断二叉树左右两边是否成镜像关系
  6. java 3des 32位密钥_3des,java_java 中32位秘钥长度的 3des加密方法?,3des,java - phpStudy...
  7. 防范网络*** 应用层防护是重点
  8. 实战:通过组策略为用户部署软件
  9. android自定义弹出框样式实现
  10. WebAssembly 介绍
  11. PB导出数据excel格式dw2xls
  12. python画圆形螺旋线_在PDMS中使用python直接生成管口方位图(开源分享第三集)...
  13. 普元云计算-AI杂谈:从洗衣机到老鼠屁股
  14. 【Linux(一)】最新VMware虚拟机下载与安装
  15. Cursor:GPT-4 免费的强大代码编辑器
  16. RazaviChap8
  17. 如何使用RUN as命令安装软件
  18. Linux-Day3笔记
  19. 看日光穿过手指 享受芬芳的下午茶
  20. 山石防火墙怎么映射服务器,hillstone防火墙如何设置

热门文章

  1. 黄金分割点公式java_java如何实现黄金分割数 java实现黄金分割数代码
  2. 十进制和二进制转换原理
  3. html的lang属性
  4. TreeMap自定义排序规则的两种方式
  5. python爬虫——40行代码爬取「笔趣看」全部小说
  6. 助你获取微信亿级流量的21种小程序推广攻略
  7. 插件!最好用的翻译插件!!
  8. web结课大作业结业报告(附源码及展示效果)
  9. 英语单词速记(一直更新中......)
  10. goap git上的v sploreg/goap