#include<stdio.h>
#include<stdlib.h>
#include<string.h>
int map[50][50];
int x[50],y[50],t,j=0,flag,a,b;
int dir[8][2]={-2,-1,-2,1,-1,-2,-1,2,1,-2,1,2,2,-1,2,1};//搜索的方向
void dfs(int xx,int yy)
{
int x1,y1,i;
if(flag)//如果flag==1搜索结束
{
return;
}
t++;//每搜索一个空格,t就加一
x[t]=xx;//记录走过的x路径
y[t]=yy;//记录走过的y路径
if(t==a*b)//全部走完,标记退出
{
flag=1;
return;
}
map[xx][yy]=1;//对搜索过后的元素进行标记
for(i=0;i<8;i++)
{
x1=xx+dir[i][0];
y1=yy+dir[i][1];
if(x1>0&&x1<=b&&y1>0&&y1<=a&&map[x1][y1]==0)//判断是否越界,条件是否满足
{
dfs(x1,y1);
t--;//如果当前元素符合继续搜索的条件,去掉该点重复的一次
}
}
map[xx][yy]=0;//不符合条件回溯时地图重新标记
}
int main()
{
int n;
while(scanf("%d",&n)!=EOF)
{
j=0;
memset(map,0,sizeof(map));
while(n--)
{
t=flag=0;
j++;//记录组数
scanf("%d%d",&a,&b);
dfs(1,1);//从起始坐标(1,1)开始
printf("Scenario #%d:\n",j);
if(flag)
{
for(int i=1;i<=a*b;i++)
printf("%c%d",x[i]+64,y[i]);//输出走过的路径,其中x为字母,要加64,转化成相应的字母
printf("\n");
}
else
printf("impossible\n");
printf("\n");//勿忘每一组后有一个空格
}
}
return 0;
}
#include<stdlib.h>
#include<string.h>
int map[50][50];
int x[50],y[50],t,j=0,flag,a,b;
int dir[8][2]={-2,-1,-2,1,-1,-2,-1,2,1,-2,1,2,2,-1,2,1};//搜索的方向
void dfs(int xx,int yy)
{
int x1,y1,i;
if(flag)//如果flag==1搜索结束
{
return;
}
t++;//每搜索一个空格,t就加一
x[t]=xx;//记录走过的x路径
y[t]=yy;//记录走过的y路径
if(t==a*b)//全部走完,标记退出
{
flag=1;
return;
}
map[xx][yy]=1;//对搜索过后的元素进行标记
for(i=0;i<8;i++)
{
x1=xx+dir[i][0];
y1=yy+dir[i][1];
if(x1>0&&x1<=b&&y1>0&&y1<=a&&map[x1][y1]==0)//判断是否越界,条件是否满足
{
dfs(x1,y1);
t--;//如果当前元素符合继续搜索的条件,去掉该点重复的一次
}
}
map[xx][yy]=0;//不符合条件回溯时地图重新标记
}
int main()
{
int n;
while(scanf("%d",&n)!=EOF)
{
j=0;
memset(map,0,sizeof(map));
while(n--)
{
t=flag=0;
j++;//记录组数
scanf("%d%d",&a,&b);
dfs(1,1);//从起始坐标(1,1)开始
printf("Scenario #%d:\n",j);
if(flag)
{
for(int i=1;i<=a*b;i++)
printf("%c%d",x[i]+64,y[i]);//输出走过的路径,其中x为字母,要加64,转化成相应的字母
printf("\n");
}
else
printf("impossible\n");
printf("\n");//勿忘每一组后有一个空格
}
}
return 0;
}