Notice
Recent Posts
Recent Comments
tony9402
[백준 7569] 토마토(3차원) 본문
반응형
백준 7569 토마토(3차원)
이 문제는 토마토(2차원)이랑 높이가 생겼다는 것 빼곤 똑같다. 2차원에서 위, 아래(높이 방향)이 추가 되었으므로 체크해야하는 위치가 2가지가 늘었다. 하지만 푸는 방식은 토마토(2차원)이랑 같다. (토마토(2차원) 풀이 보러가기)
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 | #include<cstdio> #include<queue> using namespace std; queue<pair<pair<int, int>, int>> q; int map[101][101][101] = { 0 }; bool visit[101][101][101] = { false }; int dx[] = { -1,1,0,0,0,0 }; int dy[] = { 0,0,0,0,-1,1}; int dz[] = { 0,0,-1,1,0,0 }; int main() { int m, n, h; scanf("%d %d %d", &m, &n, &h); for (int k = 0; k < h; k++) { for (int i = 0; i < n; i++) { for (int j = 0; j < m; j++) { scanf("%d", &map[i][j][k]); if (map[i][j][k] == 1) { q.push(make_pair(make_pair(i, j), k)); visit[i][j][k] = true; } else if (map[i][j][k] == -1) { visit[i][j][k] = true; } } } } int ans = -1; while (!q.empty()) { int size = q.size(); ++ans; while (size--) { pair<pair<int, int>, int> now = q.front(); q.pop(); for (int i = 0; i < 6; i++) { int qx, qy, qz; qx = now.first.second + dx[i]; qy = now.first.first + dy[i]; qz = now.second + dz[i]; if (qx < 0 || qx >= m || qy < 0 || qy >= n || qz < 0 || qz >= h)continue; if (!visit[qy][qx][qz] && map[qy][qx][qz] == 0) { visit[qy][qx][qz] = true; q.push(make_pair(make_pair(qy, qx), qz)); } } } } for (int k = 0; k < h; k++) { for (int i = 0; i < n; i++) { for (int j = 0; j < m; j++) { if (!visit[i][j][k])return !printf("-1"); } } } printf("%d", ans); return 0; } | cs |
반응형
'알고리즘 > Baekjoon Online Judge' 카테고리의 다른 글
[백준 1753] 최단경로 (0) | 2018.08.31 |
---|---|
[백준 1916] 최소비용 구하기 (0) | 2018.08.31 |
[백준 7576] 토마토(2차원) (0) | 2018.08.23 |
[백준 4179] 불! (0) | 2018.08.22 |
[백준 5427] 불 (0) | 2018.08.22 |
Comments