문제

코드
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;
}
}