BOJ 6593 상범빌딩

20185 단어 BFS알고리즘BFS

6방향으로 BFS를 수행하며 거리를 구해가면된다. 좌표는 tuple STL을 사용하여 구현하였다.

한시간 동안 고민했는데 틀린이유는 출력시 마지막에 .을 찍어주지 않아 계속해서 틀렸다. 다른 곳에서 삽질 ㅠ.ㅠ

#include <bits/stdc++.h>
using namespace std;
int L, R, C;
string building[31][31];
int dist[31][31][31];
int dx[6] = {-1, 1, 0, 0, 0, 0};
int dy[6] = {0, 0, -1, 1, 0, 0};
int dz[6] = {0, 0, 0, 0, -1, 1};
int main() {
    cout.sync_with_stdio(0);
    cin.tie(0);
    while(true){
        bool flag = false;
        cin >> L >> R >> C;
        if(L == 0 && R == 0 && C == 0) break;

        //initialize dist to -1
        for(int i = 0; i < L; i++){
            for(int j = 0; j < R; j++) {
                fill(dist[i][j], dist[i][j] + C, -1);
            }
        }

        queue<tuple<int, int, int>> Q;
        tuple<int, int, int> End;

        for(int i = 0; i < L; i++) {
            for(int j = 0; j < R; j++) {
                cin >> building[i][j];
                string input = building[i][j];
                for(int k = 0; k < C; k++) {
                    if(input[k] == 'S') {
                        Q.push(make_tuple(i, j, k));
                        dist[i][j][k] = 0;
                    }
                    if(input[k] == 'E') {
                        End = make_tuple(i, j, k);
                    }
                }
            }
        }
        while(!Q.empty()) {
            if(flag) break;
            auto cur = Q.front(); Q.pop();
            int curX, curY, curZ;
            tie(curZ, curX, curY) = cur;
            for(int i = 0; i < 6; i++) {
                int nz = curZ + dz[i];
                int ny = curY + dy[i];
                int nx = curX + dx[i];
                if(nz < 0 || nz >= L || nx < 0 || nx >= R || ny < 0 || ny >= C) continue;
                if(dist[nz][nx][ny] != -1) continue;
                if(building[nz][nx][ny] == '#') continue;
                Q.push(make_tuple(nz, nx, ny));
                dist[nz][nx][ny] = dist[curZ][curX][curY] + 1;
                if(building[nz][nx][ny] == 'E') {
                    flag = true;
                    cout << "Escaped in " << dist[nz][nx][ny] << " minute(s)." << '\n';
                    break;
                }
            }
        }
        if(!flag){
            cout << "Trapped!" << '\n';
        }
    }
    return 0;
}

다음 부터는 출력되는 것도 자세히 살펴보아야 겠다 ㅠ.ㅠ 너무 억울해

좋은 웹페이지 즐겨찾기