C语言——马拦过河卒.看看我的算法错哪了,并改正.要求:如图,A点有一个过河卒,需要走到目标B点.卒行走的规则:可以向下、或者向右.同时在棋盘上的任一点有一个对方的马(如上图的C点

来源:学生作业帮助网 编辑:作业帮 时间:2024/05/10 07:53:59

C语言——马拦过河卒.看看我的算法错哪了,并改正.要求:如图,A点有一个过河卒,需要走到目标B点.卒行走的规则:可以向下、或者向右.同时在棋盘上的任一点有一个对方的马(如上图的C点
C语言——马拦过河卒.看看我的算法错哪了,并改正.
要求:如图,A点有一个过河卒,需要走到目标B点.卒行走的规则:可以向下、或者向右.
同时在棋盘上的任一点有一个对方的马(如上图的C点),该马所在的点和所有跳跃一步可达的点称为方马的控制点.例如上图C点上的马可以控制9个点(图中的P1,P2...P8和C).卒不能通过对方的控制点.
棋盘用坐标表示,A点(0,0)、B点(n,m)(n,m为不超过20的整数,并由键盘输入),同样马 的位置坐标是需要给出的(约定:C≠A,同时C≠B).现在要求你计算出卒从A点能够到达B点的路 径的条数.
输入
B点的坐标(n,m)以及对方马的坐标(X,Y) {不用判错}
输出
一个整数(路径的条数).
样例输入
6 6 3 2
样例输出
17
以下是我写的代码:
#include
#include
int bollen(int mx,int my,int dx,int dy);
int db(int mx,int my,int dx,int dy);
int blen(int mx,int my,int dx,int dy);
main()//程序入口
{
int mx,my,dx,dy,result;
printf("请输入马的x,y坐标以及目的地的x,y坐标,并以逗号分开\n");
scanf("%d,%d,%d,%d",&mx,&my,&dx,&dy);
result=db(mx,my,dx,dy);
printf("一共有%d条路径\n",result);
}
int db(int mx,int my,int dx,int dy)//核心递归算法
{
int result;
if(dx>0&&dy>0&&bollen(mx,my,dx,dy))
result=db(mx,my,dx-1,dy)+db(mx,my,dx,dy-1);
else if(!bollen(mx,my,dx,dy))
result=0;
else if(dy==0||dx==0)
result=blen(mx,my,dx,dy);
return result;
}
int bollen(int mx,int my,int dx,int dy)//判断是否踩到马的控制点
{
if(abs(mx-dx)==1&&abs(my-dy)==2||abs(mx-dx)==2&&abs(my-dy)==1)
return 0;
else
return 1;
}
int blen(int mx,int my,int dx,int dy)//判断当dx或dy为0的时候,result应该是0还是1
{
static int a,b;
if(dy==0)
{
if(my0)
{
a=mx-3+my;
if(dx

C语言——马拦过河卒.看看我的算法错哪了,并改正.要求:如图,A点有一个过河卒,需要走到目标B点.卒行走的规则:可以向下、或者向右.同时在棋盘上的任一点有一个对方的马(如上图的C点
我发百度消息你咋老不回呢?除了你所说的那个问题以外,
if(abs(mx-dx)==1&&abs(my-dy)==2||abs(mx-dx)==2&&abs(my-dy)==1)这一句有问题
你判断掉了马所在的控制点
改成
if(abs(mx-dx)==1&&abs(my-dy)==2||abs(mx-dx)==2&&abs(my-dy)==1 || dx==mx && dy==my)
结果就是对的了
你的程度风格有点别扭,有些控制语句是多余的,还有就是在某些情况下,该算法还有bug,

C语言——马拦过河卒.看看我的算法错哪了,并改正.要求:如图,A点有一个过河卒,需要走到目标B点.卒行走的规则:可以向下、或者向右.同时在棋盘上的任一点有一个对方的马(如上图的C点 C语言 16*16棋盘 马数小于4的马拦过河卒问题 C语言的算法说明了一个什么道理?我今天刚看了算法,懂是懂了,但是不知道说明了什么道理?C语言我是初学者 我刚在百度知道看到经典逻辑问题;羊,白菜,狼.过河的问题,我知道怎么过河,但怎么和c++这么高级的语言扯在一起了的?还用这问题编程?若是我表达不清楚你可以百度一下看看!我不懂C++语言 C语言语法错误,帮我看看哪里错了#includevoid main(){printf(Very good!. );} C语言帮我做一下 题目是1+2+3.+1000的和的算法步骤是什么谢谢了 C语言中sin()函数用的什么算法?C语言中sin()函数用的哪种算法?可以在哪儿直接查看吗?库函数math.h中只包含了这样一条子函数的定义double _Cdecl sin (double x);我要问的是正是它用的什么算法!也就 C语言中 什么是算法 算法的表示有哪几种方式 马拦过河卒 C语言特别经典的递如图,A 点有一个过河卒,需要走到目标 B 点.卒行走规则:可以向下、或者向右.同时在棋盘上的任一点有一个对方的马(如上图的C点),该马所在的点和所有跳 求平均值的算法.C语言 C语言,闰年算法 计算1!+2!+...+20!的c语言程序 帮我看看这是哪里错了 算出来的结果不对阿. 我想要《数据结构与算法分析——C语言描述版》英文版的课后练习答案~thanks·· 算法独立于任何具体的语言,BASIC算法只能用BASIC语言来实现————错在哪里,为什么错 请问谁可以给我介绍点好的C语言算法讲解啊 牛顿算法和拉格朗日插值算法的C语言实现求如下两个算法的C语言实现:牛顿算法拉格朗日插值算法 计算机图形学直线生成算法包含DDA算法,中点Bresenham算法,改进的Bresenham算法的完整c语言程序代码, 三个数的最大公约数算法,C语言的