알고리즘
[알고리즘] 백준 6593 - 상범 빌딩 (C++)
blueberrysoda
2025. 1. 21. 23:37
[문제 링크] : https://www.acmicpc.net/problem/6593
#include <iostream>
#include <algorithm>
#include <queue>
using namespace std;
int L, C, R;
char Arr[31][31][31];
bool Visit[31][31][31];
int sz, sy, sx;
int Dir[6][3] = {{0, 0, -1}, {0, 0, 1}, {0, -1, 0}, {0, 1, 0}, {-1, 0, 0}, {1, 0, 0}};
void init(){
for(int i=0; i<31; i++){
for(int j=0; j<31; j++){
for(int k=0; k<31; k++){
Visit[i][j][k] = false;
}
}
}
return;
}
void solve(){
queue<pair<pair<int, int>, int>> Q;
Q.push({{sz, sy}, sx});
Visit[sz][sy][sx] = true;
int Ans = 0;
while(Q.empty() == false){
Ans++;
int size = Q.size();
for(int i=0; i<size; i++){
int z = Q.front().first.first;
int y = Q.front().first.second;
int x = Q.front().second;
Q.pop();
for(int j=0; j<6; j++){
int nz = z + Dir[j][0];
int ny = y + Dir[j][1];
int nx = x + Dir[j][2];
if(nz < 0 || nz >= L || ny < 0 || ny >= R || nx < 0 || nx >= C){
continue;
}
if(Arr[nz][ny][nx] == '#' || Visit[nz][ny][nx] == true){
continue;
}
if(Arr[nz][ny][nx] == 'E'){
cout << "Escaped in " << Ans << " minute(s).\n";
return;
}
Visit[nz][ny][nx] = true;
Q.push({{nz, ny}, nx});
}
}
}
cout << "Trapped!\n";
return;
}
int main(){
while(true){
init();
cin >> L >> R >> C;
if(L == 0 && R == 0 && C == 0){
break;
}
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];
if(Arr[i][j][k] == 'S'){
sz = i;
sy = j;
sx = k;
}
}
}
}
solve();
}
return 0;
}