讨论 / 那位大牛帮我看下我的这是哪儿错啊?过河卒的问题!!!
sunjing 2010-02-08 17:27:00
点我顶贴 收藏 删除
这是题目:

如图,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 <stdio.h>

main()

{

long long m[21][21]={0},f[21][21]={0},i,j,bx,by,mx,my;

scanf("%I64d%I64d%I64d%I64d",&bx,&by,&mx,&my);

m[mx][my]=1;

m[mx+1][my+2]=1;

m[mx+2][my+1]=1;

m[mx+2][my-1]=1;

m[mx+1][my-2]=1;

m[mx-1][my-2]=1;

m[mx-2][my-1]=1;

m[mx-2][my+1]=1;

m[mx-1][my+2]=1;//马所控制的点

f[0][0]=1;

for (i=1;i<=bx;i++)

if(m[i][0]==0)

f[i][0]=f[i-1][0];//不是马控制的点,卒走一步

for (j=1;j<=by;j++)

if(m[0][j]==0)

f[0][j]=f[0][j-1];//不是马控制的点,卒走一步

for(i=1;i<=bx;i++)

for(j=1;j<=by;j++)

{

if (m[i][j]==0)

f[i][j]=f[i][j-1]+f[i-1][j];//所有卒走的步数

}

printf("%I64d",f[bx][by]);

getchar();

getchar();

}

只对啦6各点!!!那位牛人帮帮啊!!!

问题补充:这是测试点错误情况:

2010-2-7 9:20:00

有效耗时: 281毫秒

测试结果1: 通过本测试点|有效耗时46ms

测试结果2: 通过本测试点|有效耗时47ms

测试结果3: 测试结果错误.错误结果为:56477193663

正确结果应为:56477364570

测试结果4: 测试结果错误.错误结果为:2203961429

正确结果应为:2203961430

测试结果5: 通过本测试点|有效耗时47ms

测试结果6: 通过本测试点|有效耗时47ms

测试结果7: 通过本测试点|有效耗时47ms

测试结果8: 测试结果错误.错误结果为:56477193663

正确结果应为:56477364570

测试结果9: 测试结果错误.错误结果为:2203961429

正确结果应为:2203961430

测试结果10: 通过本测试点|有效耗时47ms

#1 ttrrww@2010-02-08 17:27:00
回复 删除
说句不好听的话:你的程序错是很应该的!

1.在封锁不能走的点时,没有判断下标是否越界!

2.你的输出格式不太好,换 cin cout

想要标程跟我讲 trw321@sina.com ( 纯高质量,加注释)

查看更多回复
提交回复