在题解中看到有佬说深搜在较大值时会超时,但因为一开始马上想到的是深搜,所以用深搜试了试。但是,用题目中给的数据,出来的一直是0。。。
上代码吧。。。。
#include<stdio.h>
int x1,y1,x2,y2,t=0; _//(这里x1,y1为B点坐标,x2,y2为马的坐标,t为路径数)_
int a[21][21];
int dfs(int l,int m,int x,int y) _//(这里用l和m分别表示B点的xy坐标)_
{
if(x<=l&&y<=m) _//(首先判断此时点的是否在棋盘界限内)_
{
if(x==l&&y==m) _//(如果此时到达了B点,路径数t++)_
{
t++;
}
else _//(如果没有到达B点,深搜下去)_
{
if(x<=l-1&&a[x+1][y]!=1)
dfs(x1,y1,x+1,y);
if(y<=m-1&&a[x][y+1]!=0)
dfs(x1,y1,x,y+1);
}
}
else{
}
};
int main()
{
int i,j;
scanf("%d%d%d%d",&x1,&y1,&x2,&y2);
for(i=0;i<=x1;i++)
{
for(j=0;j<=y1;j++)
{
a[i][j]=0;
}
}
if((x2+2)<=x1&&(y2+1)<=y1) _//(判断马的势力范围是否在棋盘上,如果在棋盘上,则标记为1)_
{
a[x2+2][y2+1]=1;
}else
if((x2+2)<=x1&&(y2-1)>=0)
{
a[x2+2][y2-1]=1;
}else
if((x2-2)>=0&&(y2+1)<=y1)
{
a[x2-2][y2+1]=1;
}else
if((x2-2)>=0&&(y2-1)>=0)
{
a[x2-2][y2-1]=1;
}else
if((x2-1)>=0&&(y2+2)<=y1)
{
a[x2-1][y2+2]=1;
}else
if((x2-1)>=0&&(y2-2)>=0)
{
a[x2-1][y2-2]=1;
}else
if((x2+1)<=x1&&(y2+2)<=y1)
{
a[x2+1][y2+2]=1;
}else
if((x2+1)<=x1&&(y2-2)>=0)
{
a[x2+1][y2-2]=1;
}else
dfs(x1,y1,0,0);
printf("%d",t);
}