馬攔過河卒問題 (遞推解法)

2021-06-22 14:26:45 字數 1147 閱讀 7865

過河卒(noip2002初中組複賽第四題)
問題描述:

棋盤上a點有乙個過河卒,需要走到目標b點。卒行走的規則:可以向下或向右。

同時在棋盤上的任一點有乙個對方的馬(如圖中的c點),該馬所在的點和所有跳躍一步可達的點稱為對方馬的控制點。例如圖中c點上的馬可以控制9個點。卒不能走到對方馬的控制點。

棋盤用座標表示,a點座標(0,0)、b點座標(n, m) (n,m為不超過20的整數,並由鍵盤輸入),同樣馬的位置座標c是需要給出的(c≠a,且c≠b)。現在要求你計算出卒從a點能夠到達b點的路徑條數。

輸入:

b點的座標(n, m)以及對方馬的座標(x,y),不用判錯。

輸出:

乙個整數(路徑的條數)。

樣例:8 6 0 4

1617

10 10 4 4

6802

14 16 7 5

39217645

思路:step[n][m]=step[n-1][m]+step[n][m-1];

#include#includeint map[110][110];

int step[110][110];

int main()

; int dy=;

while(~scanf("%d%d%d%d",&n,&m,&x,&y))

map[x][y]=0;

int tx,ty;

for(i=0;i<8;i++)

if(map[0][0])

step[0][0]=1;

for(i=1;i<=n;i++)

if(map[i][0])

step[i][0]=step[i-1][0];

for(j=1;j<=m;j++)

if(map[0][j])

step[0][j]=step[0][j-1];

for(i=1;i<=n;i++)

for(j=1;j<=m;j++)

if(map[i][j])

step[i][j]=step[i-1][j]+step[i][j-1];

printf("%d\n",step[n][m]);

}return 0;

}

遞推之馬攔過河卒

馬攔過河卒 time limit 3000 ms memory limit 65536 kib submit statistic discuss problem description 棋盤上a點有乙個過河卒,需要走到目標b點。卒行走的規則 可以向下 或者向右。同時在棋盤上c點有乙個對方的馬,該馬所...

遞推遞迴 L 馬攔過河卒

題目 description 棋盤上a點有乙個過河卒,需要走到目標b點。卒行走的規則 可以向下 或者向右。同時在棋盤上c點有乙個對方的馬,該馬所在的點和所有跳躍一步可達的點稱為對方馬的控制點。因此稱之為 馬攔過河卒 棋盤用座標表示,a點 0,0 b點 n,m n,m為不超過15的整數 同樣馬的位置座...

馬攔過河卒

問題描述 棋盤上a 點有乙個過河卒,需要走到目標 b點。卒行走的規則 可以向下 或者向右。同時在棋盤上 c點有乙個對方的馬,該馬所在的點和所有跳躍一步可達的點稱為對方馬的控制點。因此稱之為 馬攔過河卒 棋盤用座標表示,a 點 0,0 b 點 n,m n,m為不超過 15的整數 同樣馬的位置座標是需要...