Problem Description
在一个4*5的棋盘上,马的初始位置坐标(纵 横)位置由键盘输入,求马能返回初始位置的所有不同走法的总数(马走过的位置不能重复,马走“日”字)。如果马的初始位置坐标超过棋盘的边界,则输出ERROR。例如初始位置为4 6,则输出ERROR。
Input
输入数据只有一行,有两个用空格分开的整数,表示马所在的初始位置坐标。首行首列位置编号为(1 1)。
Output
输出一行,只有一个整数,表示马能返回初始位置的所有不同走法的总数。
如果输入的马的初始位置超出棋盘边界,则输出ERROR。
如果输入的马的初始位置超出棋盘边界,则输出ERROR。
Example Input
2 2
Example Output
4596
Hint
#include<stdio.h>
#include<string.h>
int map[10][10];
int dire[8][2]={{1,2},{-1,2},{1,-2},{-1,-2},{2,1},{2,-1},{-2,1},{-2,-1}};
int sum;
int n,m;
void fun(int x,int y);
int main()
{
scanf("%d%d",&m,&n);
if(m>4||n>5||m<=0||n<=0)
{
printf("ERROR\n");
return 0;
}
memset(map,0,sizeof(map));
fun(m,n);
printf("%d",sum);
return 0;
}
void fun(int x,int y)
{
int i;
for(i=0;i<8;i++)
{
int xx;
int yy;
xx=x+dire[i][0];
yy=y+dire[i][1];
//if(xx<=0||yy<=0||xx>4||yy>5||map[xx][yy]==1) {return ;}
if(xx>0&&yy>0&&xx<=4&&yy<=5&&map[xx][yy]!=1)
{
if(xx==m&&yy==n)
{sum++;}
else
{
map[xx][yy]=1;
fun(xx,yy);
map[xx][yy]=0;
}
}
}
}