务必记着清空缓存数据啊 说多了都是泪
#include <iostream>
using namespace std;
int direction[8][2] = {
-2, -1,
-2, 1,
-1, -2,
-1, 2,
1, -2,
1, 2,
2, -1,
2, 1,
};
int path[100][2] = {
0
};
int history[100][100];
int p;
int q;
bool impossible;
void dfs(int x, int y, int step){
if (!impossible) {
return;
}
if (p * q == step) {
impossible = false;
for (int i = 0; i < step; i++) {
cout << (char)(path[i][0] + 'A') << path[i][1] + 1;
}
cout << endl;
return;
}
for (int i = 0 ; i < 8 ; i++) {
int tx = x + direction[i][0];
int ty = y + direction[i][1];
if (tx >= 0 && tx < p && ty >= 0 && ty < q && history[tx][ty] == 0) {
path[step][0] = tx;
path[step][1] = ty;
history[tx][ty] = 1;
dfs(tx, ty, step + 1);
history[tx][ty] = 0;
}
}
}
int main(int argc, const char * argv[]) {
int n;
cin >> n;
for (int i = 0; i < n; i ++) {
cin >> q >> p;
impossible = true;
memset(history, 0, sizeof(int));
history[0][0] = 1;
memset(path, 0, sizeof(int));
cout << "Scenario #" << i + 1 << ":" << endl;
dfs(0, 0, 1);
if (impossible) {
cout << "impossible" << endl;
}
cout << endl;
}
return 0;
}