> 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個點。卒不能走到對方馬的控制點。棋盤用座標表...