題目:
如圖,a 點有乙個過河卒,需要走到目標 b 點。卒行走規則:可以向下、或者向右。同時在棋盤上的任一點有乙個對方的馬(如上圖的c點),該馬所在的點和所有跳躍一步可達的點稱為對方馬的控制點。例如上圖 c 點上的馬可以控制 9 個點(圖中的p1,p2 … p8 和 c)。卒不能通過對方馬的控制點。
棋盤用座標表示,a 點(0,0)、b 點(n,m)(n,m 為不超過 20 的整數,並由鍵盤輸入),同樣馬的位置座標是需要給出的(約定: c不等於a,同時c不等於b)。現在要求你計算出卒從 a 點能夠到達 b 點的路徑的條數。
1<=n,m<=15
**:const
dx:array [1..8] of longint=(2,1,-1,-2,-2,-1,1,2);
dy:array [1..8] of longint=(1,2,2,1,-1,-2,-2,-1);
maxn=50;
varf:array [-1..maxn,-1..maxn] of longint;
flag:array [-1..maxn,-1..maxn] of boolean;
n,m,x,y:longint;
procedure init;
vari,j:longint;
begin
readln(n,m,x,y);
fillchar(flag,sizeof(flag),true);
flag[x,y]:=false;
f[0,0]:=1;
for i:=1 to 8 do
if (x+dx[i]>=0) and (x+dx[i]<=n) and (y+dy[i]>=0) and (y+dy[i]<=m) then
flag[x+dx[i],y+dy[i]]:=false;
for i:=1 to n do
flag[i,-1]:=false;
for i:=1 to m do
flag[-1,i]:=false;
end;
procedure main;
vari,j:longint;
begin
for i:=0 to n do
for j:=0 to m do
if flag[i,j] and ((i<>0) or (j<>0))then
begin
if flag[i-1,j] and (f[i-1,j]<>0) then
inc(f[i,j],f[i-1,j]);
if flag[i,j-1] and (f[i,j-1]<>0) then
inc(f[i,j],f[i,j-1]);
end;
writeln(f[n,m]);
end;
begin
init;
main;
end.
codeves天梯 過河卒
如圖,a 點有乙個過河卒,需要走到目標 b 點。卒行走規則 可以向下 或者向右。同時在棋盤上的任一點有乙個對方的馬 如上圖的c點 該馬所在的點和所有跳躍一步可達的點稱為對方馬的控制點。例如上圖 c 點上的馬可以控制 9 個點 圖中的p1,p2 p8 和 c 卒不能通過對方馬的控制點。棋盤用座標表示,...
CodeVS1010 過河卒 解題報告 DP
description 如圖,a 點有乙個過河卒,需要走到目標 b 點。卒行走規則 可以向下 或者向右。同時在棋盤上的任一點有乙個對方的馬 如上圖的c點 該馬所在的點和所有跳躍一步可達的點稱為對方馬的控制點。例如上圖 c 點上的馬可以控制 9 個點 圖中的p1,p2 p8 和 c 卒不能通過對方馬的...
(昨天的)codevs天梯 逃跑的拉爾夫 dfs
題目 年輕的拉爾夫開玩笑地從乙個小鎮上偷走了一輛車,但他沒想到的是那輛車屬於警察局,並且車上裝有用於發射車子移動路線的裝置。那個裝置太舊了,以至於只能發射關於那輛車的移動路線的方向資訊。編寫程式,通過使用一張小鎮的地圖幫助警察局找到那輛車。程式必須能表示出該車最終所有可能的位置。小鎮的地圖是矩形的,...