[BaekJoon] 백준 6593번 상범 빌딩
문제: https://www.acmicpc.net/problem/6593
내코드
- 간단한 bfs 문제
- 다른 점은 3차원 배열을 이용한다는 것.
- x, y, z 위치만 헷갈리지 말고 맞춰주자.
#include <iostream>
#include <queue>
#include <utility>
#define MAXNUM 30
using namespace std;
int dx[] = { 0, 0, 1, -1, 0, 0 };
int dy[] = { 1, -1, 0, 0, 0, 0 };
int dz[] = { 0, 0, 0, 0, 1, -1 };
int main(void) {
ios::sync_with_stdio(false);
cin.tie(0);
int l, r, c; cin >> l >> r >> c;
char arr[MAXNUM][MAXNUM][MAXNUM];
int visited[MAXNUM][MAXNUM][MAXNUM];
queue<pair<pair<int, int>, int>> qu;
while (l != 0 || r != 0 || c != 0) {
while (!qu.empty()) qu.pop();
for (int i = 0; i < l; i++) {
for (int j = 0; j < r; j++) {
for (int k = 0; k < c; k++) {
cin >> arr[i][j][k];
visited[i][j][k] = -1;
if (arr[i][j][k] == 'S') {
qu.push(make_pair(make_pair(i, j), k));
// z x y
visited[i][j][k] = 0;
}
}
}
}
bool escaped = false;
while (!qu.empty()) {
int x = qu.front().first.second;
int y = qu.front().second;
int z = qu.front().first.first;
qu.pop();
if (arr[z][x][y] == 'E') {
cout << "Escaped in " << visited[z][x][y] << " minute(s)." << "\n";
escaped = true;
break;
}
for (int i = 0; i < 6; i++) {
int tmpz = z + dz[i];
int tmpx = x + dx[i];
int tmpy = y + dy[i];
if (tmpx < 0 || tmpx >= r || tmpy < 0 || tmpy >= c || tmpz < 0 || tmpz >= l) continue;
if (arr[tmpz][tmpx][tmpy] != '#' && visited[tmpz][tmpx][tmpy] == -1) {
qu.push(make_pair(make_pair(tmpz, tmpx), tmpy));
visited[tmpz][tmpx][tmpy] = visited[z][x][y] + 1;
}
}
}
if (escaped == false) cout << "Trapped!" << "\n";
cin >> l >> r >> c;
}
return 0;
}
참고
728x90
반응형
'CS > Algorithm 문제' 카테고리의 다른 글
[BaekJoon] 백준 1629번 곱셈 (0) | 2021.01.24 |
---|---|
[BaekJoon] 백준 13549번 숨바꼭질 3 (0) | 2020.05.29 |
[BaekJoon] 백준 5014 스타트링크 (0) | 2020.05.24 |
[BaekJoon] 백준 2146번 다리 만들기 (0) | 2020.05.17 |
[BaekJoon] 백준 9202번 Boggle (0) | 2020.05.03 |