過河卒 遞推

2021-08-25 16:42:13 字數 1417 閱讀 9281

> description

如圖,a 點有乙個過河卒,需要走到目標 b 點。卒行走規則:可以向下、或者向右。同時在棋盤上的任一點有乙個對方的馬(如上圖的c點),該馬所在的點和所有跳躍一步可達的點稱為對方馬的控制點。例如上圖 c 點上的馬可以控制 9 個點(圖中的p1,p2 … p8 和 c)。卒不能通過對方馬的控制點。

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

> input

b點的座標(n,m)以及對方馬的座標(x,y)

> output

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

> sample input

6 6 3 2

> sample output

17> 解題思路

自我感覺這一道題跟騎士遊歷有點像,而且比那一道題要簡單一點,因為這一道題的卒只能往右走或往下走,就不用再存進乙個陣列了。

其實也可以說這個卒只能上面走下來或從左邊走過來,所以位置(i,j)的數就等於它上面的數加上它左邊的數,然後馬和馬的控制點就設為0。邊界設為1(馬和馬後面所以的數都設為0),如下圖:

後面都是這樣一直加過去(電腦與本人的字有很大的差異)

> **

#include

#include

#include

using namespace std;

const int x1[9]

=;const int y1[9]

=;long long s[25]

[25]=

,a[25][

25]=;

int n,m,x,y;

int main()

//行for

(int j=

1;j<=m;j++

)//列

//設定邊界的初值

for(int i=

1;i<=n;i++

)for

(int j=

1;j<=m;j++

)printf

("%i64d"

,s[n]

[m])

;return0;

}

遞推與遞迴 過河卒

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

遞推之馬攔過河卒

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

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

過河卒 noip2002初中組複賽第四題 問題描述 棋盤上a點有乙個過河卒,需要走到目標b點。卒行走的規則 可以向下或向右。同時在棋盤上的任一點有乙個對方的馬 如圖中的c點 該馬所在的點和所有跳躍一步可達的點稱為對方馬的控制點。例如圖中c點上的馬可以控制9個點。卒不能走到對方馬的控制點。棋盤用座標表...