题意 马走完整个棋盘的路径 (注意 搜索的顺序)
http://poj.org/problem?id=2488
#include<stdio.h>
#include<string.h>
#define N 100
int d[8][2]={{-2,-1},{-2,1},{-1,-2},{-1,2},{1,-2},{1,2},{2,-1},{2,1}};
int m[N],f,k,r,c,vis[N][N],read[N][N];
void dfs(int x,int y,int k)
{
int i;
if(f==1)return ;
read[k][0]=x;
read[k][1]=y;
if(k==r*c-1)
{
f=1;
for(i=0;i<=k;i++)
{
printf("%c%d",'A'+read[i][0],read[i][1]+1);
}
printf("\n");
return ;
}
for(i=0;i<8;i++)
{
if(f==1)return ;
int dx=x+d[i][0];
int dy=y+d[i][1];
if(dx>=0&&dx<c&&dy>=0&&dy<r)
{
if(!vis[dx][dy])
{
vis[dx][dy]=1;
dfs(dx,dy,k+1);
vis[dx][dy]=0;
}
}
}
}
int main()
{
int t,i,j;
int l=0;
scanf("%d",&t);
while(t--)
{
l++;
scanf("%d%d",&r,&c);
printf("Scenario #%d:\n",l);
f=0;
for(i=0;i<c;i++)
{
for(j=0;j<r;j++)
{
if(f)break;
memset(vis,0,sizeof(vis));
vis[i][j]=1;
if(!f)
dfs(i,j,0);
}
if(f)break;
}
if(f==0)printf("impossible\n");
printf("\n");
}
}