c
复制代码
#include <iostream>
#include <vector>
using namespace std;
const int N = 21;
int vx[] = {0,0,1,-1};
int vy[] = {1,-1,0,0};
int xba[N];
int yba[N];
int path[N*N];
int n, idx;
bool st[N][N];
inline void dfs(int x, int y) {
if (x == n-1 && y == n-1) {
for (int i = 0; i < n-1; i++) {
if (xba[i] || yba[i]) return;
}
if (xba[n-1] == 1 && yba[n-1] == 1) {
path[idx ++] = n*y+x;
for (int j = 0; j < idx; j++) {
cout << path[j] << ' ';
}cout << endl;
}
}
for (int i = 0; i < 4; i++) {
int nx, ny;
nx = x + vx[i], ny = y + vy[i];
if (x >= 0 && y >= 0 && x < n && y < n && !st[x][y]) {
st[x][y] = true;
xba[x]--;
yba[y]--;
path[idx ++] = n*y+x;
dfs(nx, ny);
xba[x]++;
yba[y]++;
idx--;
st[x][y] = false;
}
}
}
int main() {
cin >> n;
for (int i = 0; i < n; i++) {
cin >> xba[i];
}
for (int i = 0; i < n; i++) {
cin >> yba[i];
}
dfs(0, 0);
}