알고리즘

[알고리즘] 백준 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;
}