#define _CRT_SECURE_NO_WARNINGS 1
#include<bits/stdc++.h>
int num[2][20];
int main()
{
int horse[9][2] = { {0,0}, { 2,1}, {1,2}, {-1,2}, {-2,1}, {-2,-1}, {-1,-2}, {1,-2}, {2,-1} };
int n, m, horse_x, horse_y;
scanf("%d %d %d %d", &n, &m, &horse_x, &horse_y);
num[0][0] = 1, num[1][0] = 1;
for (int j = 1; j <= n; j++)//初始化第一行
{
bool flag = true;
for (int k = 0; k < 9; k++)//判断是否会被马吃
{
if (j == horse_x + horse[k][0] && horse_y + horse[k][1] == 0)//如果被吃,清零此处
{
num[0][j] = 0;
flag = false;
break;
}
if (flag) { num[0][j] = 1; }
}//初始化第一行为1
}
for (int i = 1; i <= m; i++)//i是双行搜索的第一行的纵坐标
{
for (int j = 1; j <= n; j++)//j是横坐标
{
num[1][j] += num[1][j - 1] + num[0][j];//加上左边和上面的路径数
for (int k = 0; k < 9; k++)//判断是否会被马吃
{
if (i == horse_x + horse[k][0] && j == horse_y + horse[k][1])//如果被吃,清零此处
{
num[1][j] = 0;
break;
}
}
num[0][j] = num[1][j];//更新下面一行为上面一行,向下搜索
}
for (int second = 1; second <= n; second++) { num[1][second] = 0; }//清零第二行,表示向下搜索一行
}
printf("%d", num[0][n]);
return 0;
}
为什么WA了4个?