描述
棋盤上A點有一個過河卒,需要走到目標B點。卒行走的規則:可以向下、或者向右。同時在棋盤上C點有一個對方的馬,該馬所在的點和所有跳躍一步可達的點稱爲對方馬的控制點。因此稱之爲“馬攔過河卒”。
棋盤用座標表示,A點(0, 0)、B點(n, m)(n, m爲不超過15的整數),同樣馬的位置座標是需要給出的。現在要求你計算出卒從A點能夠到達B點的路徑的條數,假設馬的位置是固定不動的,並不是卒走一步馬走一步。
格式
輸入格式
一行四個數據,分別表示B點座標和馬的座標。
輸出格式
一個數據,表示所有的路徑條數。
限制
每個測試點1s
來源
zhouyc
思路
代碼
#include <iostream>
using namespace std;
int x[]={1,2,2,1,-1,-2,-2,-1};
int y[]={2,1,-1,-2,-2,-1,1,2}; //寫出近馬點的座標
int n,m,hx,hy,f[101][101]={1},a[101][101];//f的初值爲1,也就是f[0][0]=1;
int main()
{
cin>>n>>m>>hx>>hy;
a[hx][hy]=1; //馬所在的位置不能走
for(int i=0;i<8;i++)
a[hx+x[i]][hy+y[i]]=1; //循環八個方向,將馬周圍不能走的點標註
for(int i=0;i<=n;i++)
for(int j=0;j<=m;j++)
{
if(i&&!a[i-1][j])
f[i][j]+=f[i-1][j];
if(j&&!a[i][j-1])
f[i][j]+=f[i][j-1];
}
cout<<f[n][m];
return 0;
}