[C언어] 6593 상범 빌딩

SW 업무 관련/백준

[C언어] 6593 상범 빌딩

WillBe_ 2018. 9. 24. 00:36

문제 푸는 것보다...입력 받는게 더 어려웠다.....하....

int 로 배열 선언해 놓고..%s로 입력 받고 있었으니 하.....ㅜ,ㅠ

그냥 토마토 7569문제와 같이 3차원 배열 BFS임. 이게 왜 31% 정답률이지..??


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
#include <stdio.h>
#include <string.h>
typedef struct
{
    int z;
    int y;
    int x;
}point;
 
int dx[] = { -1,1,0,0,0,0 };
int dy[] = { 0,0,-1,1,0,0 };
int dz[] = { 0,0,0,0,-1,1 };
 
point Q[30 * 30 * 30= { 0, };
char map[33][33][33= { 0 };
int visit[33][33][33= { 0, };
int L, R, C, Q_Front, Q_Back;
 
int CheckBound(int z, int y, int x)
{
    if (z < 0 || y < 0 || x < 0 || z >= L || y >= C || x >= R)
        return 0;
 
    return 1;
}
 
int main()
{
    while (1)
    {
        int Flag = 0;
        Q_Front = -1, Q_Back = -1;
        memset(Q, 0sizeof(Q));
        memset(map, -1sizeof(map));
        memset(visit, 0sizeof(visit));
        scanf("%d %d %d"&L, &C, &R);
 
        if (L == 0 && C == 0 && R == 0)
            return 0;
 
        for (int a = 0; a < L; a++)
        {
            for (int b = 0; b < C; b++)
            {
                scanf("%s", map[a][b]);
                for (int c = 0; c < R; c++)
                {
                    if (map[a][b][c] == 'S')
                    {
                        Q[++Q_Back].z = a;
                        Q[Q_Back].y = b;
                        Q[Q_Back].x = c;
                        visit[a][b][c] = 1;
                    }
                }
            }
            getchar();
        }
 
 
        while (Q_Front != Q_Back)
        {
            int x = Q[++Q_Front].x;
            int y = Q[Q_Front].y;
            int z = Q[Q_Front].z;
 
            for (int i = 0; i < 6; i++)
            {
                int xx = x + dx[i];
                int yy = y + dy[i];
                int zz = z + dz[i];
 
                if (!CheckBound(zz, yy, xx))
                    continue;
 
                if (map[zz][yy][xx] == 'E')
                {
                    Flag = 1;
                    printf("Escaped in %d minute(s).\n", visit[z][y][x]);
                    break;
                }
 
                if (map[zz][yy][xx] == '.' && visit[zz][yy][xx] == 0)
                {
                    visit[zz][yy][xx] = visit[z][y][x] + 1;
                    Q[++Q_Back].z = zz;
                    Q[Q_Back].y = yy;
                    Q[Q_Back].x = xx;
                }
 
            }
 
            if (Flag)
                break;
        }
        if (!Flag)
            printf("Trapped!\n");
    }//While끝
 
 
 
    return 0;
}
cs


'SW 업무 관련 > 백준' 카테고리의 다른 글

[C언어] 14891. 톱니바퀴  (0) 2018.09.24
[C언어] 25686 치킨 배달.  (0) 2018.09.24
[C언어] 14502. 연구소(DFS)  (0) 2018.09.23
[C언어]14502. 연구소  (0) 2018.09.17
[C언어]14503. 로봇 청소기  (0) 2018.09.16