문제

코드
import java.io.*;
import java.util.LinkedList;
import java.util.Queue;
import java.util.StringTokenizer;
public class q7576 {
    static int[][] box; 
    static int[][] neighbor = {{-1, 0}, {1, 0}, {0, -1}, {0, 1}}; 
    static int N, M;
    static Queue<Integer> queue = new LinkedList<Integer>();
    static int max = 0;
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
        
        StringTokenizer st = new StringTokenizer(br.readLine(), " ");
        M = Integer.parseInt(st.nextToken());
        N = Integer.parseInt(st.nextToken());
        box = new int[N][M];
        
        for(int i=0; i<N; i++) {
            st = new StringTokenizer(br.readLine(), " ");
            for(int j=0; j<M; j++) {
                box[i][j] = Integer.parseInt(st.nextToken());
                
                if(box[i][j] == 1) queue.add(i*M+j);
            }
        }
        
        bw.write(bfs()+"");
        bw.flush();
    }
    public static int bfs() {
        while(queue.size() > 0) {
            int u = queue.poll();
            
            for(int k=0; k<neighbor.length; k++) {
                int i = (u/M) + neighbor[k][0]; 
                int j = (u%M) + neighbor[k][1]; 
                if(i<0 || i>=N || j<0 || j>=M) continue;
                if(box[i][j] != 0) continue;
                box[i][j] = box[u/M][u%M] + 1;
                queue.add(i*M+j);
                
                if(max < box[u/M][u%M]) max = box[u/M][u%M];
            }
        }
        int max = 0;
        for(int i=0; i<N; i++) {
            for(int j=0; j<M; j++) {
                if(box[i][j] == 0) return -1;
                max = Math.max(max, box[i][j]);
            }
        }
        if(max == 1) return 0;
        return max-1;
    }
}