#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