import java.util.*;
class Point {
public int x, y;
Point(int x, int y) {
this.x = x;
this.y = y;
}
}
public class Main {
static int[] dx = {-1, 0, 1, 0};
static int[] dy = {0, 1, 0, -1};
static int[][] board, dis;
static int n, m;
static Queue<Point> Q = new LinkedList<>();
public void BFS() {
while(!Q.isEmpty()) {
Point tmp = Q.poll();
//꺼낸 다음 뻗어나가기
//while이 끝나면 dis배열은 꽉채워져 있다.
for(int i = 0; i < 4; i++) {
int nx = tmp.x + dx[i];
int ny = tmp.y + dy[i];
//경계선 및 통로 확인
if(nx >= 0 && ny >= 0 && nx < n && ny < m && board[nx][ny] == 0) {
board[nx][ny] = 1;
Q.offer(new Point(nx, ny));
dis[nx][ny] = dis[tmp.x][tmp.y] + 1;
}
}
}
}
public static void main(String[] args) {
Main T = new Main();
Scanner kb = new Scanner(System.in);
m = kb.nextInt();
n = kb.nextInt();
board = new int[n][m];
dis = new int[n][m];
for(int i = 0; i < n; i++) {
for(int j = 0; j < m; j++) {
board[i][j] = kb.nextInt();
//출발점들을 미리 넣어놓아야한다!★★
//익은 토마토를 넣어놓기!
if(board[i][j] == 1) Q.offer((new Point(i, j)));
}
}
T.BFS();
boolean flag = true;
int answer = Integer.MIN_VALUE;
for(int i = 0; i < n; i++) {
for(int j = 0; j <m; j++) {
//익지 않은 토마토가 있을 때
if(board[i][j] == 0) flag = false;
}
}
if(flag) {
for(int i = 0; i < n; i++) {
for(int j = 0; j < m; j++) {
answer = Math.max(answer, dis[i][j]);
}
}
System.out.println(answer);
} else System.out.println(-1);
}
}
'Algorithm > inflearn' 카테고리의 다른 글
섬나라 아일랜드(BFS) (0) | 2021.10.05 |
---|---|
섬나라 아일랜드(DFS) (0) | 2021.10.05 |
미로의 최단거리 통로(BFS) (0) | 2021.10.05 |
미로탐색(DFS) (0) | 2021.10.05 |
★★★조합 구하기(DFS) (0) | 2021.10.04 |