谁能告诉我 pascal 一道问题为什么不能通过

来源:百度知道 编辑:UC知道 时间:2024/09/24 08:25:19
是VIJOS里面的
题目:棋盘上A点有一个过河卒,需要走到目标B点。卒行走的规则:可以向下、或者向右。同时在棋盘上C点有一个对方的马,该马所在的点和所有跳跃一步可达的点称为对方马的控制点。因此称之为“马拦过河卒”。
棋盘用坐标表示,A点(0, 0)、B点(n, m)(n, m为不超过15的整数),同样马的位置坐标是需要给出的。现在要求你计算出卒从A点能够到达B点的路径的条数,假设马的位置是固定不动的,并不是卒走一步马走一步。

输入格式 Input Format
一行四个数据,分别表示B点坐标和马的坐标。
程序如下
program guohe;
const cx:array[1..8]of -2..2=(-2,-2,-1,-1,1,1,2,2);
cy:array[1..8]of -2..2=(1,-1,2,-2,2,-2,1,-1);
var i,j,p,q,x1,y1,x2,y2,count:longint;
procedure yh(a,b:longint);
begin
if (a=x1) and (b=y1) then begin inc(count);exit;end;
if (a>0) and (a<10) and (b>=6) and (b<=10) then

for i:=1 to 8 do
begin
if (a+1<>x2+cx[i]) or (b<>y2+cy[i]) then yh(a+1,b);
if (a<>x2+cx[i]) or (b+1<>y2+cy[i]) then yh(a,b+1);
end;

end;
begin
count:=0;
readln(x1,y1,x2,y2);
for p:=1 to 9 do
for q:=6 to 10 do
yh(p,q);
writeln(count);<

const
d:array[1..8,1..2]of integer=((1,2),(1,-2),(-1,2),(-1,-2),(2,1),(2,-1),(-2,1),(-2,-1));
var
n,m,x,y,i,j,xx,yy:longint;
b:array[-2..22,-2..22]of boolean;
a:array[-2..22,-2..22]of int64;
begin
readln(n,m,x,y);
fillchar(b,sizeof(b),true);
b[x,y]:=false;
for i:=1 to 8 do
begin
xx:=x+d[i,1];
yy:=y+d[i,2];
if (xx>=0)and(xx<=n)and(yy>=0)and(yy<=m)then
b[xx,yy]:=false;
end;
if (b[0,0]=false)or(b[n,m]=false) then writeln(0)
else
begin
fillchar(a,sizeof(a),0);
a[0,0]:=1;
for i:=0 to n do
for j:=0 to m do
if b[i,j] then a[i,j]:=a[i-1,j]+a[i,j-1]+a[i,j];
writeln(a[n,m]);
end;
end.

再查查你的递归有没有写错
附:
var
a : array[0..1000,0..1000] of longint;
f1,f2,i,j,n,k,sum,m:longint;
procedure try(x,y:longint);
begin
if (x=n) and (y=m) then
begin
inc(sum);