Scroll indicator done
728x90

https://www.acmicpc.net/problem/7569


#include <iostream>
#include <queue>
#include <utility>
using namespace std;

int n, m, h;
int map[102][102][102];
int dz[6] = { 0,0,0 ,0,-1,1 };
int dx[6] = { 0,0 ,1,-1,0,0 };
int dy[6] = { -1,1,0,0,0,0 };

int d[102][102][102];
int day = 0;

int main() {
	ios::sync_with_stdio(NULL);
	cin.tie(0);
	cin >> m >> n >> h;
	queue<pair<pair<int, int>, int>> Q;

	for (int i = 0; i < h; i++) {
		for (int j = 0; j < n; j++) {
			for (int k = 0; k < m; k++) {
				cin >> map[i][j][k];
				if (map[i][j][k] == 1) {
					Q.push({ {i,j},k });
				}
				if (map[i][j][k] == 0)
					d[i][j][k] = -1;
			}
		}
	}

	while (!Q.empty()) {
		pair<pair<int, int>, int> cur = Q.front();
		Q.pop();
		for (int i = 0; i < 6; i++) {
			int nz = cur.first.first + dz[i];
			int nx = cur.first.second + dx[i];
			int ny = cur.second + dy[i];

			if (nx < 0 || nx >= n || ny < 0 || ny >= m || nz < 0 || nz >= h) continue;
			if (d[nz][nx][ny] >= 0) continue;
			d[nz][nx][ny] = d[cur.first.first][cur.first.second][cur.second] + 1;
			Q.push({ { nz,nx },ny });
		}
	}

	for (int i = 0; i < h; i++) {
		for (int j = 0; j < n; j++) {
			for (int k = 0; k < m; k++) {
				if (d[i][j][k] == -1) {
					cout << -1;
					return 0;
				}
				day = max(day, d[i][j][k]);
			}
		}
	}
	cout << day;
}
728x90

'BAEKJOON > C++' 카테고리의 다른 글

[B14888][연산자 끼워넣기][C++]  (0) 2023.01.03
[B11286][절댓값 힙][C++]  (0) 2021.10.27
[B6064][카잉 달력][C++]  (0) 2021.07.27
[B2667][단지 번호 붙이기][C++]  (0) 2021.07.20
[B2178][미로 탐색][C++]  (0) 2021.07.16