总是多一个(完美的错过了正确答案)
#include"iostream"
#include"cstdio"
using namespace std;
int f[50][50] , nmd[8][2] = {(-2 , -1) , (-1 , 1) , (-1 , -2),
(-1 , 2) , (1 , -2) , (1 , 2),
(2 , 1) , (2 , -1)};
bool flag[500][500];
int main(){
int x , y , bx , by;
cin >> bx >> by >> x >> y;
bx ++ ; by ++ ; x ++ ; y ++ ;
flag[x][y] = true;
for(int i = 0 ; i < 8 ; ++i){
if (x + nmd[i][0] >= 0 and x + nmd[i][0] <= bx and
y + nmd[i][1] >= 0 and y + nmd [i][1] <= by)
flag[x+nmd[i][0]][y+nmd[i][1]] = true;
}
f[1][1] = 1;
for(int i = 1 ; i <= bx ;++i){
for(int j = 2; j <= by ;++j){
if(flag[i][j] == true)
continue;
else
f[i][j] = f[i-1][j] + f[i][j-1];
}
}
printf("%d" , f[bx][by]);
return 0;
}