通过暴力枚举试图AC结果只能过两个点
查看原帖
通过暴力枚举试图AC结果只能过两个点
326985
Kosuzu2020楼主2020/6/29 20:49
#include <stdio.h>
#pragma warning(disable:4996)
int n, m, ma[10][2], x, y;
long long unsigned count;
int dir[9][2] = { {-2,-1},{-1,-2},{1,2},{2,1},{-2,1},{1,-2},{-1,2},{2,-1},{0,0} };
int way[2][2] = { {1,0},{0,1} };
void dfs(int xx, int yy)
{
	if (xx == n && yy == m)
	{
		count++;
		return;
	}
	if (xx > n || yy > m || xx < 0 || yy < 0)
		return;
	int i;
	for (i = 0; i <= 8; i++)
	{
		if (xx == ma[i][0] && yy == ma[i][1])
			return;
	}

	for (i = 0; i < 2; i++)
	{
		xx += way[i][0];
		yy += way[i][1];
		dfs(xx, yy);
		xx -= way[i][0];
		yy -= way[i][1];
	}
}
int main()
{
	scanf("%d%d%d%d", &n, &m, &x, &y);
	for (int i = 0; i <= 8; i++)
	{
		ma[i][0] = x + dir[i][0];
		ma[i][1] = y + dir[i][1];
	}
	dfs(0, 0);
	printf("%llu\n", count);
	return 0;
}

这是我写的代码,想知道这种方法是否还可以优化?在假定时间足够长的时候是否是正确的?

(当然我不指望用这个码AC了

u1s1状态转移方程真的香(x

2020/6/29 20:49
加载中...