#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;
}

Embed on website

To embed this project on your website, copy the following code and paste it into your website's HTML: