#include<stdio.h>
#define MAX_N 30
int dx[8]={-1,1,-2,2,-2,2,-1,1};
int dy[8]={-2,-2,-1,-1,1,1,2,2};
struct node
{
int x1,y1;
}path[MAX_N*MAX_N];
int n,m,ans,flag;
int dis[MAX_N][MAX_N];
int chess[MAX_N][MAX_N];
void dfs(int x,int y,int num)
{
int i,x2,y2;
if(num==ans)
{
flag=1;
return ;
}
for(i=0;i<8;i++)
{
x2=x+dx[i];y2=y+dy[i];
if(x2<0||x2>=n||y2<0||y2>=m||dis[x2][y2])
continue;
path[num].x1=x2;
path[num].y1=y2;
dis[x2][y2]=1;
dfs(x2,y2,num+1);
if(flag)
return ;
dis[x2][y2]=0;
}
}
int main(void)
{
int T,i,cnt=1;
scanf("%d",&T);
while(T--)
{
memset(dis,0,sizeof(dis));
dis[0][0]=1;
path[0].x1=0;
path[0].y1=0;
flag=0;
scanf("%d%d",&n,&m);
ans=n*m;
printf("Scenario #%d:\n",cnt++);
dfs(0,0,1);
if(flag)
{
for(i=0;i<ans;i++)
{
printf("%c%d",path[i].y1+'A',path[i].x1+1);
}
printf("\n\n");
}
else
printf("impossible\n\n");
}
}
poj 2488 A Knight's Journey
最新推荐文章于 2023-01-31 11:15:00 发布