하다보니

7569번-토마토 본문

알고리즘 풀이/백준

7569번-토마토

claire 2022. 2. 5. 00:44
#include<bits/stdc++.h>
using namespace std;

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 m, n, h;//m은 가로, n은 세로, h는 높이
int board[102][102][102];
int dis[102][102][102];
queue<tuple<int, int, int>> Q;
int main() {
	cin >> m >> n >> h;
	for(int k=0;k<h;k++) {
		for (int i = 0; i < n; i++) {
			for (int j = 0; j < m; j++) {
				cin >> board[i][j][k];
				if (board[i][j][k] == 1) Q.push({ i,j,k });
				if (board[i][j][k] == 0)dis[i][j][k] = -1;
			}
		}
	}
	while (!Q.empty()) {
		auto cur = Q.front(); Q.pop();
		int x, y, z;
		tie(x, y, z) = cur;
		for (int i = 0; i < 6; i++) {
			int nx = x + dx[i];
			int ny = y + dy[i];
			int nz = z + dz[i];
			if (nx < 0 || nx >= n || ny < 0 || ny >= m || nz < 0 || nz >= h)continue;
			if (dis[nx][ny][nz] != -1)continue;
			Q.push({ nx,ny,nz });
			dis[nx][ny][nz] = dis[x][y][z] + 1;
		}
	}
	int ans = 0;
	for (int i = 0; i < h; i++) {
		for (int j = 0; j < n; j++) {
			for (int k = 0; k < m; k++) {
				if (dis[j][k][i] == -1) {
					cout << -1;
					return 0;
				}
				ans = max(ans, dis[j][k][i]);
			}
		}
	}
	cout << ans;
}

'알고리즘 풀이 > 백준' 카테고리의 다른 글

2583번-영역 구하기  (0) 2022.02.07
7562번-나이트의 이동  (0) 2022.02.05
10026번-적록색약  (0) 2022.02.04
1012번-유기농 배추  (0) 2022.02.03
1697번-숨바꼭질  (0) 2022.02.03