中国象棋马走日(要求打印每一种走法) — 递归
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");
}
中国象棋马走日(要求打印每一种走法) — 递归相关推荐
- 信息学奥赛一本通(1219:马走日)
1219:马走日 时间限制: 1000 ms 内存限制: 65536 KB 提交数: 12078 通过数: 6316 [题目描述] 马在中国象棋以日字形规则移动. 请编写一段程 ...
- 马走日程序Java_马走日什么意思
中国象棋在中国有着三千多年的历史,在中国古代,象棋被列为士大夫们的修身之艺,属于琴棋书画四艺之一.现在则被视为是怡神益智的一种有益身心的活动. 中国象棋是由两人轮流走子,以"将死" ...
- Bailian4123 马走日【DFS】
4123:马走日 总时间限制: 1000ms 内存限制: 1024kB 描述 马在中国象棋以日字形规则移动. 请编写一段程序,给定n*m大小的棋盘,以及马的初始位置(x,y),要求不能重复经过棋盘上的 ...
- GDUT - 专题学习1 C - 马走日
C - 马走日 题目 马在中国象棋以日字形规则移动. 请编写一段程序,给定 n×m 大小的棋盘,以及马的初始位置 (x,y),要求不能重复经过棋盘上的同一个点,计算马可以有多少途径遍历棋盘上的所有点. ...
- 马走日(DFS深搜)
马走日 目录 马走日 题意描述:给多组数据,给棋盘的大小和马的初始位置,求有多少种方法让马走日全部走过棋盘,不能重复走棋盘的同一个点 解题思路:利用数组来对所有的棋盘上所有的点初始化表示未走过,把马的 ...
- 马走日的解法(dfs)
马在中国象棋以日字形规则移动. 请编写一段程序,给定n*m大小的棋盘,以及马的初始位置(x,y),要求不能重复经过棋盘上的同一个点,计算马可以有多少途径遍历棋盘上的所有点. Input 第一行为整数T ...
- 马走日(深搜 C++)
马走日 总时间限制: 1000ms 内存限制: 1024kB 描述 马在中国象棋以日字形规则移动. 请编写一段程序,给定n*m大小的棋盘,以及马的初始位置(x,y),要求不能重复经过棋盘上的同一个点, ...
- 马走日 java实现
马走日 问题描述: 在中国象棋里,马的走棋要遵循"马走日"的规则,在本题中,给定马的起始位置,以及一个目标位置,判定该马是否能够走到该位置,如果能走到,最少步数是多少.(假设棋盘上 ...
- 信息学奥赛一本通:1219.马走日
信息学奥赛一本通:1219.马走日 1219:马走日 时间限制: 1000 ms 内存限制: 65536 KB 提交数: 7406 通过数: 3863 [题目描述] 马在中国象棋以日字形规则移动. 请 ...
- 【简洁,易懂程式】C - 马走日
[简洁,易懂程式]C - 马走日 题目: 马在中国象棋以日字形规则移动. 请编写一段程序,给定n*m大小的棋盘,以及马的初始位置(x,y), 要求不能重复经过棋盘上的同一个点,计算马可以有多少途径遍历 ...
最新文章
- 提高你30%的设计效率的PPT快捷键
- [flask实践] 解决mysql数据库不支持中文的问题
- 每日一皮:无良商家,难怪头发越来越少了!
- openwrt satisfy_dependencies_for: Cannot satisfy the following dependencies for kmod: * 问题解决
- 每天一道LeetCode-----判断二叉树左右两边是否成镜像关系
- java 3des 32位密钥_3des,java_java 中32位秘钥长度的 3des加密方法?,3des,java - phpStudy...
- 防范网络*** 应用层防护是重点
- 实战:通过组策略为用户部署软件
- android自定义弹出框样式实现
- WebAssembly 介绍
- PB导出数据excel格式dw2xls
- python画圆形螺旋线_在PDMS中使用python直接生成管口方位图(开源分享第三集)...
- 普元云计算-AI杂谈:从洗衣机到老鼠屁股
- 【Linux(一)】最新VMware虚拟机下载与安装
- Cursor:GPT-4 免费的强大代码编辑器
- RazaviChap8
- 如何使用RUN as命令安装软件
- Linux-Day3笔记
- 看日光穿过手指 享受芬芳的下午茶
- 山石防火墙怎么映射服务器,hillstone防火墙如何设置