#include #include typedef struct { int x, y, z; } pos_t; pos_t moves[48][4] = { { {0, 0, 0, }, {0, 0, 1, }, {0, 0, 2, }, {0, 1, 1, },}, { {0, 0, 0, }, {0, 0, 1, }, {0, 0, 2, }, {1, 0, 1, },}, { {0, 0, 0, }, {0, 1, 0, }, {0, 1, 1, }, {0, 2, 0, },}, { {0, 0, 0, }, {0, 1, 0, }, {0, 2, 0, }, {1, 1, 0, },}, { {0, 0, 0, }, {0, 1, -1, }, {0, 1, 0, }, {0, 1, 1, },}, { {0, 0, 0, }, {0, 1, -1, }, {0, 1, 0, }, {0, 2, 0, },}, { {0, 0, 0, }, {1, 0, 0, }, {1, 0, 1, }, {2, 0, 0, },}, { {0, 0, 0, }, {1, 0, 0, }, {1, 1, 0, }, {2, 0, 0, },}, { {0, 0, 0, }, {1, 0, -1, }, {1, 0, 0, }, {1, 0, 1, },}, { {0, 0, 0, }, {1, 0, -1, }, {1, 0, 0, }, {2, 0, 0, },}, { {0, 0, 0, }, {1, -1, 0, }, {1, 0, 0, }, {1, 1, 0, },}, { {0, 0, 0, }, {1, -1, 0, }, {1, 0, 0, }, {2, 0, 0, },}, { {0, 0, -1, }, {0, 0, 0, }, {0, 0, 1, }, {0, 1, 0, },}, { {0, 0, -1, }, {0, 0, 0, }, {0, 0, 1, }, {1, 0, 0, },}, { {0, 0, -2, }, {0, 0, -1, }, {0, 0, 0, }, {0, 1, -1, },}, { {0, 0, -2, }, {0, 0, -1, }, {0, 0, 0, }, {1, 0, -1, },}, { {0, -1, 0, }, {0, 0, 0, }, {0, 0, 1, }, {0, 1, 0, },}, { {0, -1, 0, }, {0, 0, 0, }, {0, 1, 0, }, {1, 0, 0, },}, { {0, -1, 0, }, {0, 0, -1, }, {0, 0, 0, }, {0, 0, 1, },}, { {0, -1, 0, }, {0, 0, -1, }, {0, 0, 0, }, {0, 1, 0, },}, { {0, -1, 1, }, {0, 0, 0, }, {0, 0, 1, }, {0, 0, 2, },}, { {0, -1, 1, }, {0, 0, 0, }, {0, 0, 1, }, {0, 1, 1, },}, { {0, -1, -1, }, {0, 0, -1, }, {0, 0, 0, }, {0, 1, -1, },}, { {0, -1, -1, }, {0, 0, -2, }, {0, 0, -1, }, {0, 0, 0, },}, { {0, -1, -1, }, {0, -1, 0, }, {0, -1, 1, }, {0, 0, 0, },}, { {0, -2, 0, }, {0, -1, 0, }, {0, 0, 0, }, {1, -1, 0, },}, { {0, -2, 0, }, {0, -1, 0, }, {0, -1, 1, }, {0, 0, 0, },}, { {0, -2, 0, }, {0, -1, -1, }, {0, -1, 0, }, {0, 0, 0, },}, { {-1, 0, 0, }, {0, 0, 0, }, {0, 0, 1, }, {1, 0, 0, },}, { {-1, 0, 0, }, {0, 0, 0, }, {0, 1, 0, }, {1, 0, 0, },}, { {-1, 0, 0, }, {0, 0, -1, }, {0, 0, 0, }, {0, 0, 1, },}, { {-1, 0, 0, }, {0, 0, -1, }, {0, 0, 0, }, {1, 0, 0, },}, { {-1, 0, 0, }, {0, -1, 0, }, {0, 0, 0, }, {0, 1, 0, },}, { {-1, 0, 0, }, {0, -1, 0, }, {0, 0, 0, }, {1, 0, 0, },}, { {-1, 0, 1, }, {0, 0, 0, }, {0, 0, 1, }, {0, 0, 2, },}, { {-1, 0, 1, }, {0, 0, 0, }, {0, 0, 1, }, {1, 0, 1, },}, { {-1, 0, -1, }, {0, 0, -1, }, {0, 0, 0, }, {1, 0, -1, },}, { {-1, 0, -1, }, {0, 0, -2, }, {0, 0, -1, }, {0, 0, 0, },}, { {-1, 0, -1, }, {-1, 0, 0, }, {-1, 0, 1, }, {0, 0, 0, },}, { {-1, 1, 0, }, {0, 0, 0, }, {0, 1, 0, }, {0, 2, 0, },}, { {-1, 1, 0, }, {0, 0, 0, }, {0, 1, 0, }, {1, 1, 0, },}, { {-1, -1, 0, }, {0, -1, 0, }, {0, 0, 0, }, {1, -1, 0, },}, { {-1, -1, 0, }, {0, -2, 0, }, {0, -1, 0, }, {0, 0, 0, },}, { {-1, -1, 0, }, {-1, 0, 0, }, {-1, 1, 0, }, {0, 0, 0, },}, { {-2, 0, 0, }, {-1, 0, 0, }, {-1, 0, 1, }, {0, 0, 0, },}, { {-2, 0, 0, }, {-1, 0, 0, }, {-1, 1, 0, }, {0, 0, 0, },}, { {-2, 0, 0, }, {-1, 0, -1, }, {-1, 0, 0, }, {0, 0, 0, },}, { {-2, 0, 0, }, {-1, -1, 0, }, {-1, 0, 0, }, {0, 0, 0, },}, }; int busy[6][6][2]; int put(int i, int x, int y, int z, int n) { int c; int cx, cy, cz; for (c = 0; c < 4; c++) { cx = moves[i][c].x + x; cy = moves[i][c].y + y; cz = moves[i][c].z + z; if (cx < 0 || cx > 5 || cy < 0 || cy > 5 || cz < 0 || cz > 1 || busy[cx][cy][cz]) return 0; } for (c = 0; c < 4; c++) { cx = moves[i][c].x + x; cy = moves[i][c].y + y; cz = moves[i][c].z + z; busy[cx][cy][cz] = n; } return 1; } void rem(int i, int x, int y, int z) { int c; int cx, cy, cz; for (c = 0; c < 4; c++) { cx = moves[i][c].x + x; cy = moves[i][c].y + y; cz = moves[i][c].z + z; busy[cx][cy][cz] = 0; } } void p(void) { int x, y, z; printf("------------------"); for (z = 0; z < 2; z++) { for (y = 0; y < 6; y++) { for (x = 0; x < 6; x++) { printf(" %2.2d", busy[x][y][z]); } printf(""); } printf(""); } printf("\n"); } void go(int x, int y, int z, int n) { int i; if (z == 2) { p(); /*exit(1);*/ } if (busy[x][y][z]) { int nx = x, ny = y, nz = z; nx++; if (nx == 6) { nx = 0; ny++; if (ny == 6) { ny = 0; nz++; } } go(nx, ny, nz, n); return; } for (i = 0; i < 48; i++) { if (put(i, x, y, z, n)) { int nx = x, ny = y, nz = z; nx++; if (nx == 6) { nx = 0; ny++; if (ny == 6) { ny = 0; nz++; } } go(nx, ny, nz, n+1); rem(i, x, y, z); } } } int main(void) { go(0, 0, 0, 1); return 0; }