SHARE
TWEET

Untitled

a guest Oct 20th, 2019 64 Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. #include <bits/stdc++.h>
  2. using namespace std;
  3.  
  4. const int N = 33;
  5. struct T {
  6.   int x, y, z;
  7. };
  8. char a[6][N][N];
  9. int vst[N][N][N], dep[N][N][N];
  10. char dc[7] = "FBLRUD";
  11. int dx[6] = {1, -1, 0, 0, 0, 0};
  12. int dy[6] = {0, 0, -1, 1, 0, 0};
  13. int dz[6] = {0, 0, 0, 0, -1, 1};
  14. char ch[N][N][N];
  15. T prv[N][N][N];
  16. int rk[555];
  17. int main() {
  18.   int n;
  19.   for(int i = 0; i < 6; i++) rk[dc[i]] = i;
  20.   for(int qq = 1; ; qq++) {
  21.     scanf("%d", &n);
  22.  
  23.     if(n == 0) break;
  24.     fgets(a[0][0], N, stdin);
  25.     for(int d = 0; d < 6; d++) {
  26.       for(int i(0); i < n; i++) {
  27.         fgets(a[d][i], N, stdin);
  28.         //scanf("%s", a[d][i]);
  29.         cout << a[d][i] << endl;
  30.       }
  31.     }
  32.     for(int i(0); i < n; i++) {
  33.       for(int j(0); j < n; j++) {
  34.         if(a[2][i][n - j - 1] == '#') a[0][i][j] = '#';
  35.         if(a[3][i][n - j - 1] == '#') a[1][i][j] = '#';
  36.         if(a[5][n - i - 1][j] == '#') a[4][i][j] = '#';
  37.       }
  38.     }
  39.     int F = 0, R = 1, U = 4;
  40.     vector<T> q;
  41.     q.push_back({n - 2, n - 2, n - 2});
  42.     for(int i(0); i < n; i++) for(int j(0); j < n; j++) for(int k(0); k < n; k++) {
  43.       vst[i][j][k] = 0;
  44.     }
  45.     vst[n - 2][n - 2][n - 2] = true;
  46.     dep[n - 2][n - 2][n - 2] = 0;
  47.     for(int op(0); op < (int)q.size(); op++) {
  48.       int x = q[op].x, y = q[op].y, z = q[op].z;
  49.       for(int d(0); d < 6; d++) {
  50.         int X = x + dx[d], Y = y + dy[d], Z = z + dz[d];
  51.         if(  a[F][n - Z - 1][n - Y - 1] == ' '
  52.           && a[R][n - Z - 1][X] == ' '
  53.           && a[U][n - X - 1][n - Y - 1] == ' ') {
  54.           if(vst[X][Y][Z] == false) {
  55.             vst[X][Y][Z] = 1;
  56.             dep[X][Y][Z] = dep[x][y][z] + 1;
  57.             q.push_back({X, Y, Z});
  58.             prv[X][Y][Z] = q[op];
  59.             ch[X][Y][Z] = dc[d];
  60.           }else if(dep[X][Y][Z] == dep[x][y][z] + 1) {
  61.             if(rk[dc[d]] < rk[ch[X][Y][Z]]) {
  62.               prv[X][Y][Z] = q[op];
  63.               ch[X][Y][Z] = dc[d];
  64.             }
  65.           }
  66.         }
  67.       }
  68.     }
  69.     string ans;
  70.     int x = 1, y = 1, z = 1;
  71.     while(!(x == n - 2 && y == n - 2 && z == n - 2)) {
  72.       ans.push_back(ch[x][y][z]);
  73.       auto t = prv[x][y][z];
  74.       x = t.x, y = t.y, z = t.z;
  75.     }
  76.     cout << ans << endl;
  77.   }
  78. }
RAW Paste Data
We use cookies for various purposes including analytics. By continuing to use Pastebin, you agree to our use of cookies as described in the Cookies Policy. OK, I Understand
 
Top