有没有大佬帮我康康,第五个点过不了, 输入14 16 7 5 输出39217645 我的输出39217630 QAQ实在想不出来哪里有问题
#include <iostream>
using namespace std;
unsigned long long x[21][21];
int a, b, c, d;
void made(int i, int j) { //马的落脚点置为-1
if (i >= 0 && j >= 0 && i <= a && j <= b)x[i][j] = -1;
}
void basic() {
made(c, d);
made(c - 2, d - 1);
made(c - 2, d + 1);
made(c - 1, d - 2);
made(c - 1, d + 2);
made(c + 2, d + 1);
made(c + 2, d - 1);
made(c + 1, d + 2);
made(c + 1, d - 2); //马
if (x[0][0] != -1)x[0][0] = 1;
for (int i = 1; i <= a; i++) //上左两条边置为1
{
if (x[0][i - 1] != -1 && x[0][i] != -1)x[0][i] = 1;
else x[0][i] = -1;
if (x[i - 1][0] != -1 && x[i][0] != -1)x[i][0] = 1;
else x[i][0] = -1;
}
}
void cal(int i, int j) { //到达除去马落脚点其他位置路径数=上+左
if (x[i - 1][j] == -1 && x[i][j - 1] == -1)x[i][j] = 0;
else if (x[i - 1][j] == -1)x[i][j] = x[i][j - 1];
else if (x[i][j - 1] == -1)x[i][j] = x[i - 1][j];
else x[i][j] = x[i - 1][j] + x[i][j - 1];
}
void game() {
int i, j;
for (i = 1; i <= a; i++)
for (j = 1; j <= b; j++)
if (x[i][j] != -1)cal(i, j);
}
void check() {
for (int i = 0; i <= a; i++)
{
for (int j = 0; j <= b; j++)
cout << x[i][j] << " ";
cout << endl;
}
}
int main() {
cin >> a >> b >> c >> d;
basic();
game();
if (x[a][b] == -1)cout << 0;
else cout << x[a][b];
// check();
return 0;
}