永发信息网

pascal马拦过河卒

答案:1  悬赏:40  手机版
解决时间 2021-11-14 23:30
  • 提问者网友:
  • 2021-11-14 15:46
pascal马拦过河卒
最佳答案
  • 五星知识达人网友:蕴藏春秋
  • 2021-11-14 17:12

如图,A点有一个过河卒,需要走到目标B点,可以向下或向右走。
同时在棋盘上的某一点有一个对方的马(如上图的C点),该马所在的点和所有跳跃一步可达的点为对方马的控制点。如上图,P1……P5,C为对方吗马的控制点,卒不能通过。
棋盘用坐标表示,点a(0,0),点b(n,m)(n,m为不超过20的整数),马的坐标是C点(x,y)(C<>a,C<>b)。现在要求你计算卒从A点能够到达B点的路径条数。
输入格式:n,m,x,y (n,m)为B点的坐标,(x,y)为对方马的坐标。
输出格式:一个整数(路径条数)。
输入样例:6 6 3 2
输出样例:17
参考程序:
const
  dx:array[1..8] of integer=(2,1,-1,-2,-2,-1,1,2);
  dy:array[1..8] of integer=(1,2,2,1,-1,-2,-2,-1);
var
  f:array[0..20,0..20] of longint;
  g:array[-2..22,-2..22] of boolean;
  i,j,n,m,x,y:integer;
begin
  readln(n,m,x,y);
  fillchar(g,sizeof(g),true);
  g[x,y]:=false;
  for i:=1 to 8 do g[x+dx[i],y+dy[i]]:=false;
  if g[0,0] then f[0,0]:=1;
  for j:=1 to m do
    if g[0,j] then f[0,j]:=f[0,j-1];
  for i:=1 to n do
    if g[i,0] then f[i,0]:=f[i-1,0];
  for i:=1 to n do
    for j:=1 to m do
      if g[i,j] then f[i,j]:=f[i-1,j]+f[i,j-1];
  writeln(f[n,m]);
end.
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯