在一个4*5的棋盘上,输入马的起始位置坐标(纵、横),求马能返回初始位置的所有不同走法的总数(马走过的位置不能重复,马走“日”字)。
多个测试数据。 每组2个数,表示起始位置坐标。
输出不同走法的总数。
2 2
1 3
4596
4772
DFS
#include
int f[8][2]={{-1,-2},{-1,2},{-2,1},{-2,-1},{1,2},{1,-2},{2,1},{2,-1}};
int sum;
int x,y;
void dfs(int x1,int y1,int vis[5][6])
{
int i,xx,yy;
for(i=0;i<8;i++)
{
xx=x1+f[i][0];
yy=y1+f[i][1];
if(xx>0 && xx<5 && yy>0 && yy<6 && vis[xx][yy]==0)
{
vis[xx][yy]=1;
dfs(xx,yy,vis);
vis[xx][yy]=0;
}
if(x==xx && y==yy)
sum++;
}
}
int main()
{
while(scanf("%d%d",&x,&y)!=EOF)
{
int vis[5][6]={0};
if(x<0 || x>4 || y<0 || y>5)
continue;
else
{
sum=0;
vis[x][y]=1;
dfs(x,y,vis);
printf("%d\n",sum);
}
}
return 0;
}