문제
토마토
코드
#include <iostream>
#include <queue>
#include <tuple>
using namespace std;
int board[101][101][101];
int visit[101][101][101];
bool board_check = false;
int dx[6] = {0, 0, 1, -1, 0, 0};
int dy[6] = {1, -1, 0, 0, 0, 0};
int dz[6] = {0, 0, 0, 0, 1, -1};
int main()
{
ios::sync_with_stdio(0);
cin.tie(0);
queue<tuple<int, int, int>> q;
int n, m, o;
cin >> n >> m >> o;
for (int i = 0; i < o; i++)
{
for (int j = 0; j < m; j++)
{
for (int k = 0; k < n; k++)
{
cin >> board[i][j][k];
if (board[i][j][k] == 1)
{
visit[i][j][k] = 1;
q.push({i, j, k});
}
else if (board[i][j][k] == -1)
visit[i][j][k] = -1;
else if (board[i][j][k] == 0)
board_check = true;
}
}
}
if (board_check == false)
{
cout << 0;
return (0);
}
int day = 0;
while(!q.empty())
{
tuple<int, int, int> cur = q.front();
q.pop();
for (int i = 0; i < 6; i++)
{
int tz = get<0>(cur) + dz[i];
int ty = get<1>(cur) + dy[i];
int tx = get<2>(cur) + dx[i];
if (tx < 0 || tx >= n || ty < 0 || ty >= m || tz < 0 || tz >= o)
continue;
if (board[tz][ty][tx] == -1 || visit[tz][ty][tx] != 0)
continue;
q.push({tz, ty, tx});
visit[tz][ty][tx] = visit[get<0>(cur)][get<1>(cur)][get<2>(cur)] + 1;
}
}
for (int i = 0; i < o; i++)
{
for (int j = 0; j < m; j++)
{
for (int k = 0; k < n; k++)
{
if (visit[i][j][k] == 0)
{
cout << -1;
return (0);
}
if (visit[i][j][k] > day)
day = visit[i][j][k];
}
}
}
cout << day - 1;
}