#include <iostream>
#include <string>
#include <queue>
#include <algorithm>
#include <vector>
using namespace std;
#define X first
#define Y second
struct Pos{
int z,y,x;
};
int board[102][102][102];
int vis[102][102][102];
int dx[6]={1,0,0,-1,0,0};
int dy[6]={0,1,0,0,-1,0};
int dz[6]={0,0,1,0,0,-1};
int main() {
ios::sync_with_stdio(0);
cin.tie(0);
int n,m,h;
queue<Pos> Q;
cin >> n >> m >> h;
for(int i=0; i<h; i++) { //높이
for(int j=0; j<m; j++) { //세로
for(int k=0; k<n; k++) { //가로
cin >> board[i][j][k];
}
}
}
for(int i=0; i<h; i++) { //높이
for(int j=0; j<m; j++) { //세로
for(int k=0; k<n; k++) { //가로
if(board[i][j][k]==1) {
Q.push({i,j,k});
vis[i][j][k]=0;
}
}
}
}
while(!Q.empty()) {
Pos cur=Q.front();
Q.pop();
for(int idx=0; idx<6; idx++) {
int nx=cur.x+dx[idx];
int ny=cur.y+dy[idx];
int nz=cur.z+dz[idx];
if(nx<0 || nx>= n || ny <0 || ny>=m || nz <0 || nz >=h) continue;
if(vis[nz][ny][nx]>0 || board[nz][ny][nx]!=0 )continue;
vis[nz][ny][nx]=vis[cur.z][cur.y][cur.x]+1;
Q.push(Pos{nz,ny,nx});
board[nz][ny][nx]=1;
}
}
int res=0;
for(int i=0; i<h; i++) { //높이
for(int j=0; j<m; j++) { //세로
for(int k=0; k<n; k++) { //가로
if(board[i][j][k]==0) {
cout << -1;
return 0;
}
res=max(res,vis[i][j][k]);
}
}
}
cout << res;
}
To embed this project on your website, copy the following code and paste it into your website's HTML: