xazhj741 2014-02-11 18:36:43
点我顶贴
收藏
删除
#include<iostream>
using namespace std;
bool can[26][26];
int n,m;
bool judge(int x,int y)
{
if ((x <= n) && (x >= 0) && (y <= m) && (y >= 0) && (can[x][y]))
return true;
else return false;
}
void horse(int x,int y)
{
int i,j;
int yi[9] = {0,1,2,2,1,-1,-2,-2,-1},
xi[9] = {0,2,1,-1,-2,-2,-1,1,2};
for (i = 0; i <= n; i++)
{
for (j = 0; j <= m; j++)
{
can[i][j] = true;
}
}
can[x][y] = false;
for (i = 1; i <= 8; i++)
{
if (judge(x+xi[i],y+yi[i]))
{
can[x+xi[i]][y+yi[i]] = false;
}
}
}
int main()
{
long long f[26][26] = {0};
int x,y,i,j;
cin>>n>>m>>x>>y;
horse(x,y);
f[0][0] = 1;
for (i = 0; i <= n; i++)
{
for (j = 0; j <= m; j++)
{
if (can[i][j])
{
if (i-1 >= 0) f[i][j] += f[i-1][j];
if (j-1 >= 0) f[i][j] += f[i][j-1];
}
}
}
cout<<f[n][m];
return 0;
}