Scenario #1:
A1
Scenario #2:
impossible
Scenario #3:
A1B3C1A2B4C2A3B1C3A4B2C4
比较坑,首先输入的时候,先输入的是列,不是排。其次要按字典序排,刚开始不知道怎么排,看了别人的博客,才知道要按
(-1,-2 ,1,-2 , -2,-1, 2,-1, -2,1 ,2,1 ,-1,2, 1,2)的方向进行搜索,这样搜到的第一个就是按字典序排的。
#include<stdio.h>
#include<string.h>
int fx[8][2]= {-1,-2 ,1,-2 , -2,-1, 2,-1, -2,1 ,2,1 ,-1,2, 1,2};
int a[20][20],b1[1000][2],x1,y1,f;
void dfs(int x,int y,int c)
{
int i,j;
if(c==x1*y1&&!f)
{
for(i=0; i<c; i++)
{
f=1;
printf("%c%d",b1[i][1]+'A'-1,b1[i][0]);
}
return;
}
else
for(i=0; i<8; i++)
{
if( x+fx[i][0]>0&&x+fx[i][0]<=x1 && y+fx[i][1]>0&&y+fx[i][1]<=y1 &&!a[x+fx[i][0]][y+fx[i][1]])
{
b1[c][0]=x+fx[i][0];
b1[c][1]=y+fx[i][1];
a[x+fx[i][0]][y+fx[i][1]]=1;
dfs(x+fx[i][0],y+fx[i][1],c+1);
a[x+fx[i][0]][y+fx[i][1]]=0;
}
}
}
int main()
{
int N,S;
scanf("%d",&N);
S=N;
while(N--)
{
f=0;
memset(a,0,sizeof(a));
scanf("%d%d",&x1,&y1);
b1[0][0]=1,b1[0][1]=1;
printf("Scenario #%d:\n",S-N);
a[1][1]=1;
dfs(1,1,1);
if(!f)
printf("impossible");
printf("\n\n");
}
}