Notice
Recent Posts
Recent Comments
Link
Dev.baelanche
[백준 7576] 토마토 본문
반응형
여타 BFS 문제처럼 1에서 확장하고 -1은 벽으로 취급하여 푼다.
안익은 토마토(0)이 없을때의 카운트를 출력해준다.
public class Main {
static int m;
static int n;
static int a[][];
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
m = sc.nextInt();
n = sc.nextInt();
a = new int[n][m];
for(int i=0; i<n; i++) {
for(int j=0; j<m; j++) {
a[i][j] = sc.nextInt();
}
}
bfs();
}
public static void bfs() {
Queue<Pair> tomato = new LinkedList<Pair>();
boolean visited[][] = new boolean[n][m];
int result = 0;
boolean success = false;
for(int i=0; i<n; i++) {
for(int j=0; j<m; j++) {
if(a[i][j] == 1) {
tomato.offer(new Pair(i ,j));
visited[i][j] = true;
}
}
}
int mx[] = {0, 1, 0, -1};
int my[] = {1, 0, -1, 0};
while(!tomato.isEmpty()) {
int size = tomato.size();
for(int i=0; i<n; i++) {
for(int j=0; j<m; j++) {
if(a[i][j] == 0) {
success = false;
break;
} else success = true;
}
if(!success) break;
}
if(success) break;
while(size-->0) {
Pair point = tomato.poll();
for(int i=0; i<4; i++) {
int nx = point.x + mx[i];
int ny = point.y + my[i];
if(0 <= nx && nx < n && 0 <= ny && ny < m) {
if(a[nx][ny] == 0 && !visited[nx][ny]) {
visited[nx][ny] = true;
a[nx][ny] = 1;
tomato.offer(new Pair(nx, ny));
}
}
}
}
result++;
}
System.out.println(success == true ? result : -1);
}
static class Pair {
int x;
int y;
Pair(int x, int y) {
this.x = x;
this.y = y;
}
}
}
반응형
'Data Structure & Algorithm > PS - JAVA' 카테고리의 다른 글
[백준 1697] 숨바꼭질 (0) | 2019.04.18 |
---|---|
[백준 5014] 스타트링크 (0) | 2019.04.18 |
[백준 2206] 벽 부수고 이동하기 (0) | 2019.04.18 |
[백준 3055] 탈출 (0) | 2019.04.18 |
[백준 5427] 불 (0) | 2019.04.17 |
Comments