Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- struct pos
- {
- int x, y, dir, x1, y1, dir1;
- pos() { x = 0, y = 0, dir = 0, x1 = 0, y1 = 0, dir1 = 0; };
- pos(int x, int y, int dir, int x1, int y1, int dir1) : x(x), y(y), dir(dir), x1(x1), y1(y1), dir1(dir1) {};
- };
- char c;
- int n;
- int dp[21][21][4][21][21][4];
- int a[21][21];
- int dx[4] = { -1, 0, 1, 0 };
- int dy[4] = { 0, 1, 0, -1 };
- // U R D L
- // 0 1 2 3
- int bfs()
- {
- dp[n - 1][0][0][n - 1][0][1] = 1;
- pos st = pos(n - 1, 0, 0, n - 1, 0, 1);
- queue <pos> q;
- q.push(st);
- while (!q.empty())
- {
- pos cr = q.front();
- int x = cr.x;
- int y = cr.y;
- int dir = cr.dir;
- int x1 = cr.x1;
- int y1 = cr.y1;
- int dir1 = cr.dir1;
- q.pop();
- //FORWARD
- {
- int nx = min(n - 1, max(0, x + dx[dir]));
- int ny = min(n - 1, max(0, y + dy[dir]));
- int nx1 = min(n - 1, max(0, x1 + dx[dir1]));
- int ny1 = min(n - 1, max(0, y1 + dy[dir1]));
- if (!a[nx][ny])
- nx = x, ny = y;
- if (!a[nx1][ny1])
- nx1 = x1, ny1 = y1;
- pos cur = pos(nx, ny, dir, nx1, ny1, dir1);
- if (!dp[nx][ny][dir][nx1][ny1][dir1])
- {
- dp[nx][ny][dir][nx1][ny1][dir1] = dp[x][y][dir][x1][y1][dir1] + 1;
- q.push(cur);
- if (nx == 0 && ny == n - 1 && nx1 == 0 && ny1 == n - 1)
- return dp[nx][ny][dir][nx1][ny1][dir1] - 1;
- }
- }
- //TURN LEFT
- {
- int ndir = (dir + 3) % 4;
- int ndir1 = (dir1 + 3) % 4;
- pos cur = pos(x, y, ndir, x1, y1, ndir1);
- if (!dp[x][y][ndir][x1][y1][ndir1])
- {
- dp[x][y][ndir][x1][y1][ndir1] = dp[x][y][dir][x1][y1][dir1] + 1;
- q.push(cur);
- }
- }
- //TURN RIGHT
- {
- int ndir = (dir + 1) % 4;
- int ndir1 = (dir1 + 1) % 4;
- pos cur = pos(x, y, ndir, x1, y1, ndir1);
- if (!dp[x][y][ndir][x1][y1][ndir1])
- {
- dp[x][y][ndir][x1][y1][ndir1] = dp[x][y][dir][x1][y1][dir1] + 1;
- q.push(cur);
- }
- }
- }
- return -1;
- }
- int solve()
- {
- cin >> n;
- for (int i = 0; i < n; ++i)
- for (int j = 0; j < n; ++j)
- cin >> c, a[i][j] = (c == 'E');
- int ans = bfs();
- printf("%d", ans);
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement