#include<stdio.h> #include<string.h> int visit[5][5]; int a[5][5];//记录所存储的的第几步的数值,例如在a[2][2]是第三步,a[2][2]=3; //应该是八个方向,自己可以画图看,相对于自己的位置横纵坐标相差多少 int X[8]= {2,-1,1,-2,2,1,-1,-2}; int Y[8]= {1,2,2,1,-1,-2,-2,-1}; int count;//路的方法计数器 int n; //走的步数计数器 void dfs(int x,int y) { if(n==25) //递归结束条件 { for(int i=0; i<5; i++) { for(int j=0; j<5; j++) printf("%d ",a[i][j]); printf(" "); } count++; return; } for(int k=0; k<8; k++)//八个方向依次遍历 { if((x+X[k]>=0)&&(x+X[k]<5)&&(y+Y[k]>=0)&&(y+Y[k]<5)&&(visit[x+X[k]][y+Y[k]]==0))//检查是否符合规则 { n++;//步数加1 a[x+X[k]][y+Y[k]]=n; //记录第几步的数值和路径 visit[x+X[k]][y+Y[k]]=1;// 标记已经走过 dfs(x+X[k],y+Y[k]); visit[x+X[k]][y+Y[k]]=0; //恢复现场 n--; } } } int main() { int x,y; while(~scanf("%d%d",&x,&y)) { memset(visit,0,sizeof(visit)); count=0; visit[x][y]=1; n=1; a[x][y]=n; dfs(x,y); printf("%d ",count); } return 0; }