如圖,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
分析:超典型搜尋題==。
constmaxn=20;
dx:array [1..9] of longint=(0,2,1,2,1,-2,-1,-2,-1);
dy:array [1..9] of longint=(0,1,2,-1,-2,1,2,-1,-2);
var a,g:array [0..maxn,0..maxn] of int64;
n,m:longint;
procedure init;
var i,j,x,y:longint;
begin
readln(n,m,x,y);
fillchar(a,sizeof(a),0);
fillchar(g,sizeof(g),0);
for i:=1 to 9 do
if (x+dx[i]<=n) and (x+dx[i]>=0) and (y+dy[i]<=m) and (y+dy[i]>=0) then
begin
g[x+dx[i],y+dy[i]]:=1;
a[x+dx[i],y+dy[i]]:=0;
end;
end;
procedure search(x,y:longint);
begin
if (x=0) and (y=0)
then begin
a[x,y]:=1;
exit;
end;
if (x=0) and (y<>0) and (g[x,y]=0)
then begin
search(x,y-1);
a[x,y]:=a[x,y-1];
end;
if (x<>0) and (y=0) and (g[x,y]=0)
then begin
search(x-1,y);
a[x,y]:=a[x-1,y];
end;
if (x<>0) and (y<>0) and (g[x,y]=0)
then begin
if (g[x-1,y]=0) and (a[x-1,y]=0) then search(x-1,y);
if (g[x,y-1]=0) and (a[x,y-1]=0) then search(x,y-1);
a[x,y]:=a[x-1,y]+a[x,y-1];
end;
end;
begin
init;
search(n,m);
write(a[n,m]);
end.
codeves天梯 均分紙牌
有 n 堆紙牌,編號分別為 1,2,n。每堆上有若干張,但紙牌總數必為 n 的倍數。可以在任一堆上取若於張紙牌,然後移動。移牌規則為 在編號為 1 堆上取的紙牌,只能移到編號為 2 的堆上 在編號為 n 的堆上取的紙牌,只能移到編號為 n 1 的堆上 其他堆上取的紙牌,可以移到相鄰左邊或右邊的堆上。...
codeves天梯 合併果子
在乙個果園裡,多多已經將所有的果子打了下來,而且按果子的不同種類分成了不同的堆。多多決定把所有的果子合成一堆。每一次合併,多多可以把兩堆果子合併到一起,消耗的體力等於兩堆果子的重量之和。可以看出,所有的果子經過n 1次合併之後,就只剩下一堆了。多多在合併果子時總共消耗的體力等於每次合併所耗體力之和。...
codeves天梯 產生數
給出乙個整數 n n 10 30 和 k 個變換規則 k 15 規則 一位數可變換成另乙個一位數 規則的右部不能為零。例如 n 234。有規則 k 2 2 5 3 6 上面的整數 234 經過變換後可能產生出的整數為 包括原數 234534 264564 共 4 種不同的產生數 問題 給出乙個整數 ...