토마토 다 익을때까지 걸리는 시간
익은 토마토를 que에 넣고 bfs를 돌린 후 가장 마지막 dep를 출력
만약 0이 남아있다면 0을 출력
const input = require("fs").readFileSync("dev/stdin").toString().trim().split("\n");
class Que {
q = [];
h = 0;
t = 0;
enque(v) {
this.q[this.t++] = v;
}
deque() {
const v = this.q[this.h];
delete this.q[this.h++];
return v;
}
size() {
return this.t - this.h;
}
}
const [m, n] = input[0].split(" ").map(Number);
const graph = [];
const que = new Que();
for (let i = 1; i <= n; i++) {
const line = input[i].split(" ").map(Number);
line.forEach((v, j) => {
if (v === 1) que.enque([i - 1, j, 0]);
});
graph.push(line);
}
// console.log(graph, que);
const dx = [-1, 1, 0, 0],
dy = [0, 0, -1, 1];
let ans = 0;
while (que.size()) {
const [y, x, d] = que.deque();
ans = d;
for (let i = 0; i < 4; i++) {
const nx = x + dx[i],
ny = y + dy[i];
if (nx < 0 || nx >= m || ny < 0 || ny >= n) continue;
if (!graph[ny][nx]) {
que.enque([ny, nx, d + 1]);
graph[ny][nx] = 1;
}
}
}
outer: for (let i = 0; i < n; i++) {
for (let j = 0; j < m; j++) {
if (!graph[i][j]) {
ans = -1;
break outer;
}
}
}
console.log(ans);