关于马走日子的算法实现

tianmo2010 2011-03-22 04:15:07
用C/C++编程实现:
在半个中国象棋棋盘上,马在左上角(1,1)处,马走日字...而且只能往右走...不能向左...可上可下...求从起点到(m, n)处有几种不同的走法.
...全文
1062 10 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
her0_lq 2011-04-03
  • 打赏
  • 举报
回复
6L的同学 代码 应该还要考虑出界的情况,所以最后结果应该比你的r小
tianmo2010 2011-03-25
  • 打赏
  • 举报
回复
我刚才测试了的,6楼的童鞋算法也不正确吧。这问题我已经解决了的,谢谢大家的~~
晓馨嫣梓 2011-03-23
  • 打赏
  • 举报
回复

#include<stdio.h>
#define DL 16 //定义下界
int r=0;
int f(int x,int y,const int m,const int n)
{
if(x==m)
{
if(n==y)
{
printf("i get here!\n");
++r;
}
return 0;
}
for(int i=1;i<=4;++i)
{
switch(i)
{
case 1:if(y>2)f(x+1,y-2,m,n);break;
case 2:if(y<DL-1)f(x+1,y+2,m,n);break;
case 3:if(y>1&&x<n-1)f(x+2,y-1,m,n);break;
case 4:if(y<DL&&x<n-1)f(x+2,y+1,m,n);break;
}
}
return 0;
}
int main()
{
int m=0,n=0,x=1,y=1;
scanf("%d%d",&m,&n);
f(x,y,m,n);
printf("一共有%d种走法",r);
return 0;
}

这样容易看些
晓馨嫣梓 2011-03-23
  • 打赏
  • 举报
回复
#include<stdio.h>
#define DL 16 //定义下界
int r=0;
int f(int x,int y,const int m,const int n)
{
if(x==m)
{
if(n==y)
{
printf("i get here!\n");
++r;
}
return 0;
}
for(int i=1;i<=4;++i)
{
switch(i)
{
case 1:if(y>2)f(x+1,y-2,m,n);break;
case 2:if(y<DL-1)f(x+1,y+2,m,n);break;
case 3:if(y>1&&x<n-1)f(x+2,y-1,m,n);break;
case 4:if(y<DL&&x<n-1)f(x+2,y+1,m,n);break;
}
}
return 0;
}
int main()
{
int m=0,n=0,x=1,y=1;
scanf("%d%d",&m,&n);
f(x,y,m,n);
printf("一共有%d种走法",r);
return 0;
}


哈哈~前两天才学习的数据结构的算法
jvs 2011-03-23
  • 打赏
  • 举报
回复
经典问题,网上都有源码的
AnYidan 2011-03-23
  • 打赏
  • 举报
回复
清华 严蔚敏 数据结构 好像有一张光盘,其中有走迷宫的题解,楼主可以借鉴
Ronaldo9999 2011-03-22
  • 打赏
  • 举报
回复
有点复杂哟
qq120848369 2011-03-22
  • 打赏
  • 举报
回复
做状态图的广搜或者直接深搜.
莫_问 2011-03-22
  • 打赏
  • 举报
回复
学校时,在一个图书馆上看到这个算法,lz可以去图书馆查下,我也忘记了,呵呵!!!!
tianmo2010 2011-03-22
  • 打赏
  • 举报
回复
其中m,n从键盘上输入,然后打印出有多少种走法。

70,023

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧