80分 #5 差15 求助
查看原帖
80分 #5 差15 求助
331319
Zzz000楼主2021/4/14 17:55

有没有大佬帮我康康,第五个点过不了, 输入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;
}
2021/4/14 17:55
加载中...