//此题关键是字典序怎么理解的问题 #include<iostream> using namespace std; struct Node{ int x,y; }; Node nd[64]; Node output[64]; int visited[50][50]; int res; int row,col,x,y,k; bool ans,flag; int direc[8][2]={ {-1,-2},{1,-2}, {-2,-1},{2,-1}, {-2,1},{2,1}, {-1,2},{1,2} }; bool check(int x,int y){ if(x<0||y<0||x>=row||y>=col) return false; return true; } void dfs(int a,int b){ if(flag) return; visited[a][b]=true; nd[res].x=a; nd[res].y=b; res++; if(res==row*col){ ans=true; flag=true; for(int i=0;i<row*col;i++){ output[i].x=nd[i].x; output[i].y=nd[i].y; } return; } for(int i=0;i<8;i++){ if(check(a+direc[i][0],b+direc[i][1])&&visited[a+direc[i][0]][b+direc[i][1]]==false){ dfs(a+direc[i][0],b+direc[i][1]); res--; visited[a+direc[i][0]][b+direc[i][1]]=false; } } } int main(){ int n; scanf("%d",&n); k=0; while(n--){ k++; printf("Scenario #%d:\n",k); scanf("%d%d",&row,&col); memset(visited,0,sizeof(visited)); res=0; ans=flag=false; dfs(0,0); if(ans){ for(int i=0;i<col*row;i++){ printf("%c%d",char(output[i].y+1+64),output[i].x+1); } printf("\n"); } else{ printf("impossible\n"); } printf("\n"); } return 0; }