对于一个N*N的棋盘,问可以使马遍历棋盘上所有点的方案数,并输出方案
#include <stdio.h>
int s,cnt=0;
int vis[100][100];
void print()
{
int i,j;
printf("case #%d:\n",++cnt);
for(i=0; i<s; i++)
{
for(j=0; j<s-1; j++)
printf("%4d",vis[i][j]);
printf("%4d\n",vis[i][s-1]);
}
printf("\n");
}
inline int inbound(int x,int l,int r)
{
return l<=x&&x<r;
}
void dfs(int x,int y,int n)
{
if(vis[x][y]==0 && inbound(x,0,s) && inbound(y,0,s)&& n<=s*s)
{
vis[x][y]=n;
n++;
if(n>s*s)
print();
dfs(x+1,y+2,n);
dfs(x+1,y-2,n);
dfs(x-1,y+2,n);
dfs(x-1,y-2,n);
dfs(x+2,y+1,n);
dfs(x+2,y-1,n);
dfs(x-2,y+1,n);
dfs(x-2,y-1,n);
vis[x][y]=0;
}
else return;
}
int main()
{
scanf("%d",&s);
dfs(0,0,1);
return 0;
}