-
[6593] 상범 빌딩BOJ 2021. 10. 19. 12:38
https://www.acmicpc.net/problem/6593
6593번: 상범 빌딩
당신은 상범 빌딩에 갇히고 말았다. 여기서 탈출하는 가장 빠른 길은 무엇일까? 상범 빌딩은 각 변의 길이가 1인 정육면체(단위 정육면체)로 이루어져있다. 각 정육면체는 금으로 이루어져 있어
www.acmicpc.net
<문제>
2차원이 아닌 3차원인것이 가장 큰 차이점이다. 그외에는 사실 "[7569]토마토"와 별반 다르지 않다.
state의 구성요소는 {행, 열, 높이}3개를 기본적으로 갖고가며, 구현의 편의상 '현재 비용'까지 추가했다.
<소스코드>
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657#include <bits/stdc++.h>using namespace std;int l, r, c, eh, ey, ex, dy[6] = {0, 1, 0, -1, 0, 0},dx[6] = {1, 0, -1, 0, 0, 0},dh[6] = {0, 0, 0, 0, 1, -1};char a[31][31][31];bool visited[31][31][31];typedef struct {int h, y, x, turn;} state;int main(void) {int i, j, k;while (1) {cin >> l >> r >> c;if (l == 0 && r == 0 && c == 0) break;queue<state> q;memset(visited, 0, sizeof(visited));for (i = 0; i < l; i++) {for (j = 0; j < r; j++) {for (k = 0; k < c; k++) {cin >> a[i][j][k];if (a[i][j][k] == 'S') {q.push({i, j, k, 0});visited[i][j][k] = true;} else if (a[i][j][k] == 'E') {eh = i;ey = j;ex = k;}}}}while (!q.empty()) {state cur = q.front();q.pop();if (cur.h == eh && cur.y == ey && cur.x == ex) {cout << "Escaped in " << cur.turn << " minute(s).\n";goto findAns;}for (i = 0; i < 6; i++) {int h = cur.h + dh[i];int y = cur.y + dy[i];int x = cur.x + dx[i];if (h < 0 || y < 0 || x < 0 || h >= l || y >= r || x >= c)continue;if (visited[h][y][x] == false && a[h][y][x] != '#') {visited[h][y][x] = true;q.push({h, y, x, cur.turn + 1});}}}cout << "Trapped!\n";findAns:;}return 0;}cs 'BOJ' 카테고리의 다른 글
[1348] 주차장 (0) 2021.10.22 [16920] 확장 게임 (0) 2021.10.19 [5427] 불 (0) 2021.10.19 [1213] 팰린드롬 만들기 (0) 2021.10.19 [2502] 떡 먹는 호랑이 (0) 2021.10.17