#include <iostream>
#include <cstdio>
#include <cstring>
using namespace std;
int vist[20][20];
int sign[400][2];
int dir[8][2] = {{-2 , 1},{-2,-1},{-1,-2},{-1,2},{1,-2},{1,2},{2,-1},{2,1}} ;
/*
1 2 3 4 5 6 7 8 9 ----
A
B
C
D
E
棋盘的标号应该是上图所示的, 所以深搜的方向的先后顺序很重要。
*/
int n, m;
bool judge(int x, int y) {
if(x >= 0 && x < n && y >=0 && y < m)
return true;
return false;
}
int dfs(int cnt, int x, int y) {
if(cnt == n*m)
return 1;
for(int i = 0; i < 8; i++) {
int x1 = x + dir[i][0];
int y1 = y + dir[i][1];
if(!vist[x1][y1] && judge(x1, y1)) {
vist[x1][y1] = 1;
if(dfs(cnt+1, x1, y1)) {
sign[cnt][0] = x1;
sign[cnt][1] = y1;
return 1;
}
vist[x1][y1] = 0;
}
}
return 0;
}
int main()
{
int t;
int q = 1;
scanf("%d", &t);
while(t--) {
scanf("%d%d", &m, &n); //m 表示有多少列, n 表示有多少行,
memset(vist, 0, sizeof(vist));
memset(sign, 0, sizeof(sign));
vist[0][0] = 1;
sign[0][0] = 0;
sign[0][1] = 0;
printf("Scenario #%d:\n", q++);
if(dfs(1, 0, 0)) {
for(int i = 0; i < n*m; i++) {
printf("%c%c", sign[i][0] + 'A', sign[i][1] + '1');
}
}else
printf("impossible");
printf("\n");
if(t != 0)
printf("\n");
}
return 0;
}
#include <iostream>
#include <cstdio>
#include <cstring>
using namespace std;
int vist[20][20];
int sign[400][2];
int dir[8][2] = {{-2 , 1},{-2,-1},{-1,-2},{-1,2},{1,-2},{1,2},{2,-1},{2,1}} ;
/*
1 2 3 4 5 6 7 8 9 ----
A
B
C
D
E
棋盘的标号应该是上图所示的, 所以深搜的方向的先后顺序很重要。
*/
int n, m;
bool judge(int x, int y) {
if(x >= 0 && x < n && y >=0 && y < m)
return true;
return false;
}
int dfs(int cnt, int x, int y) {
if(cnt == n*m)
return 1;
for(int i = 0; i < 8; i++) {
int x1 = x + dir[i][0];
int y1 = y + dir[i][1];
if(!vist[x1][y1] && judge(x1, y1)) {
vist[x1][y1] = 1;
if(dfs(cnt+1, x1, y1)) {
sign[cnt][0] = x1;
sign[cnt][1] = y1;
return 1;
}
vist[x1][y1] = 0;
}
}
return 0;
}
int main()
{
int t;
int q = 1;
scanf("%d", &t);
while(t--) {
scanf("%d%d", &m, &n); //m 表示有多少列, n 表示有多少行,
memset(vist, 0, sizeof(vist));
memset(sign, 0, sizeof(sign));
vist[0][0] = 1;
sign[0][0] = 0;
sign[0][1] = 0;
printf("Scenario #%d:\n", q++);
if(dfs(1, 0, 0)) {
for(int i = 0; i < n*m; i++) {
printf("%c%c", sign[i][0] + 'A', sign[i][1] + '1');
}
}else
printf("impossible");
printf("\n");
if(t != 0)
printf("\n");
}
return 0;
}