描述
在一个4X5的棋盘上,马的起始位置坐标(纵、横)位置由键盘输入,求马能返回初始位置的所有不同走法的总数(马走过的位置不能重复,马走“日”字)。
输入
输入文件第一行为测试用例的个数N,接下来N行,每行两个正整数x,y(1<=x<=5,1<=y<=6),表示马的位置坐标.
输出
每个测试用例的输出占一行,输出马能返回初始位置的所有不同走法的总数,如果没有,则输出“ERROR”(不包含双引号)。
样例输入
3
2 2
1 1
4 6
样例输出
4596
1508
ERROR
1 #include<iostream> 2 #include<cstdio> 3 #include<cstring> 4 using namespace std; 5 int m, n; 6 int dx[]={1,1,-1,-1,2,2,-2,-2}; 7 int dy[]={2,-2,2,-2,1,-1,1,-1}; 8 int map[5][6]; 9 int sx, sy, step; 10 11 void dfs(int x,int y) 12 { 13 int xx, yy, i; 14 for(i = 0; i < 8; i++) 15 { 16 xx = x + dx[i]; 17 yy = y + dy[i]; 18 if(xx>=0 && yy>=0 && xx<4 && yy<5 && map[xx][yy] ==0) 19 { 20 map[xx][yy] = 1; 21 dfs(xx,yy); 22 map[xx][yy] = 0; 23 } 24 if(xx+1==sx&&yy+1==sy) 25 step++; 26 } 27 } 28 29 int main() 30 { 31 int n; 32 while(cin>>n) 33 { 34 while(n--) 35 { 36 cin>>sx>>sy; 37 if(sx<1 || sx>4 || sy<1 || sy>5) 38 { 39 printf("ERROR\n"); 40 continue; 41 } 42 memset(map, 0, sizeof map); 43 step = 0; 44 map[sx-1][sy-1] = 1; 45 dfs(sx-1,sy-1); 46 printf("%d\n",step); 47 } 48 } 49 return 0; 50 }
时间: 2024-10-22 10:42:11