如图,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.在封锁不能走的点时,没有判断下标是否越界!
2.你的输出格式不太好,换 cin cout
想要标程跟我讲 trw321@sina.com ( 纯高质量,加注释)
