#include <cstdio>
#include <cstring>
int dir[8][2]={{-2,-1},{-2,1},{-1,-2},{-1,2},{1,-2},{1,2},{2,-1},{2,1}};
int flag[100][100],cnt,m,n;
struct node
{
char letter;
int num;
}arr[1000];
void dfs(int a,int b,int cur)
{
/*赋值*/
arr[cur].letter='A'+a-1;
arr[cur].num=b;
flag[a][b]=1;
/*判断结束条件*/
if(cur==m*n) {
cnt=cur;
return;
}
for(int i=0;i<8;i++)
{
int temp1=a+dir[i][0];
int temp2=b+dir[i][1];
/*判断边界与访问标记*/
if(temp1>0 && temp1<=n)
if(temp2>0 && temp2<=m)
if(!flag[temp1][temp2])
{
dfs(temp1,temp2,cur+1);
/*搜索完毕,快速退出*/
if(cnt==m*n)
return;
}
}
/*回溯*/
flag[a][b]=0;
}
int main(){
freopen("input.txt","r",stdin);
int T,T0;
scanf("%d",&T);
T0=T;
while(T--)
{
scanf("%d%d",&m,&n);
memset(flag,0,sizeof(flag));
cnt=0;
dfs(1,1,1);
printf("Scenario #%d:\n",T0-T);
if(cnt<m*n)
printf("impossible\n");
else
{
for(int i=1;i<=m*n;i++)
printf("%c%d",arr[i].letter,arr[i].num);
printf("\n");
}
printf("\n");
}
return 0;
}
深度优先模板(POJ2488)
最新推荐文章于 2022-04-12 15:08:53 发布