我这深搜的代码有没有问题?

#include <stdio.h>
int a[21][21]={0},count=0,m,n;
int main()
{
	int x,y;
	void search(int x,int y);
	scanf("%d%d%d%d",&m,&n,&x,&y);
	a[x][y]=1;
	a[x-1][x-2]=1;                        //将不能经过的点的值设为1
	a[x-1][x+2]=1;
	a[x-2][x+1]=1;
	a[x-2][x-1]=1;
	a[x+1][x+2]=1;
	a[x+1][x-2]=1;
	a[x+2][x+1]=1;
	a[x+2][x-1]=1;
	search(0,0);
	printf("%d\n",count);                  //输出从(0,0)点到达(m,n)点的路数
}
void search(int x,int y)
{
	if(x>m||y>n) return ;                 //如果x>m或者y>n结束搜索
	if(x==m&&y==n) {count++;return ;}     //如果到达(m,n)这点的话次数加1
	if(a[x][y+1]!=1) search(x,y+1);      //如果右方可以走的话向右搜索
	if(a[x+1][y]!=1) search(x+1,y);      //如果下方可以走的话向下搜索
}

不知道为什么,和答案对不上,我觉得我这思路是没错的。

题目就是:马之过河zu

如果是做平台上的题,请注意下您的程序可能会导致崩溃。例如在a[x-1][x-2]中, x-1 或者 x-2 很可能是负数或者数组越界。