- 马拦过河卒
- 2009-05-09 23:30:36 @
program ljlf;
const
max=100000;
var
a:array[-10..20,-10..20] of longint;
n,m,hx,hy,i,j:integer;
k,g:longint;
procedure work;
begin
fillchar(a,sizeof(a),0);
readln(n,m,hx,hy);
a[hx,hy]:=max;
a[hx-2,hy-1]:=max;
a[hx-1,hy-2]:=max;
a[hx+1,hy-2]:=max;
a[hx+2,hy-1]:=max;
a[hx-2,hy+1]:=max;
a[hx-1,hy+2]:=max;
a[hx+1,hy+2]:=max;
a[hx+2,hy+1]:=max;
for i:=1 to n do begin
if amax then a:=1; end;
for i:=1 to m do begin
if amax then a[0,i]:=1; end;
for i:=1 to n do
begin
for j:=1 to n do
begin
if amax then
begin
if a=max then k:=0 else k:=a;
if a=max then g:=0 else g:=a;
a:=k+g;
end
else a:=0;
end;
end;
writeln(a[n,m]);
end;
begin
work;
end.
这是我的程序
高手看看有什么特殊情况没有考虑的。
2 条评论
-
RayXie LV 8 @ 2009-05-11 21:47:38
一楼的看清楚在回答
你的方程和我的方程是一样的。
-
2009-05-11 11:39:53@
其实不用这么麻烦的。
分析题意可知道整个棋盘就只有9个点(马本身和马能跳到的8个点)无法到达;要到达一个点(x,y)假设到达(x-1,y)点有n条路径,到达(x,y-1)
有m条路径,则到达(x,y)点就有m+n条路径(因为一个点只能由它左边或上边到达)
所以状态转移方程就是:
if t= ture then f:=f+f;
数组t为布尔型,表示坐标为(i,j)的点能否到达,数组f表示到达坐标为(i,j)的点的路径是多少条。
当然有特殊情况:首先付初值f[0,0]:=1,然后就是在最上边的点只能由左边到达,在最左边的点只能由上边到达
- 1