标准dfs,注意跳出条件
#include <stdio.h>
#include <string.h>
int xx[8] = {-2, -2, -1, -1, 1, 1, 2, 2};
int yy[8] = {-1, 1, -2, 2, -2, 2, -1, 1};
int map[26][26];
char movex[30];
int movey[30]={1};
int m,p,q;
void dfs(int x,int y);
int main(int argc, char *argv[])
{
int n,k,l;
int i,j,flag;
scanf("%d",&n);
for(k=1;k<=n;k++)
{
flag=1;
m=1;
movex[0]='A';
memset(map,0,sizeof(map));
scanf("%d%d",&p,&q);
dfs(1,1);
printf("Scenario #%d:\n",k);
if(m==p*q)
for(l=0;l<q*p;l++)
{
printf("%c%d",movex[l],movey[l]);
}
else
printf("impossible");
printf("\n\n");
}
return 0;
}
void dfs(int x,int y)
{
int i,j;
if(m==p*q)return ;
else
{
map[x][y]=1;
for(i=0;i<8;i++)
{
if(x+xx[i]>=1&&x+xx[i]<=q&&y+yy[i]>=1&&y+yy[i]<=p&&map[x+xx[i]][y+yy[i]]==0&&m!=p*q)
{
x+=xx[i];y+=yy[i];
movex[m]='A'+x-1;
movey[m++]=y;
dfs(x,y);
if(m!=p*q)
{
map[x][y]=0;
x-=xx[i];y-=yy[i];
m--;
}
}
}
}
}