공부공간

BOJ - 7576 ) 토마토 본문

알고리즘/완전탐색(BFS,DFS)

BOJ - 7576 ) 토마토

개발자가될수있을까? 2020. 1. 19. 16:34

 


https://www.acmicpc.net/problem/7576

 

 

7576번: 토마토

첫 줄에는 상자의 크기를 나타내는 두 정수 M,N이 주어진다. M은 상자의 가로 칸의 수, N은 상자의 세로 칸의 수를 나타낸다. 단, 2 ≤ M,N ≤ 1,000 이다. 둘째 줄부터는 하나의 상자에 저장된 토마토들의 정보가 주어진다. 즉, 둘째 줄부터 N개의 줄에는 상자에 담긴 토마토의 정보가 주어진다. 하나의 줄에는 상자 가로줄에 들어있는 토마토의 상태가 M개의 정수로 주어진다. 정수 1은 익은 토마토, 정수 0은 익지 않은 토마토, 정수 -1은 토마

www.acmicpc.net


익은 토마토가 주변으로 퍼져나가면서 안익은 토마토를 잠식해버리는 문제이다.

기본적은 Bfs형태로, 4방향을 탐색하면서 안익은 토마토가 발견되면 큐에 넣어주었다.

토마토가 들어있지 않음을 체크해주기위해,

 

큐가 비었을때 ( 모든 탐색이 완료 되었을 때), 0이 존재하는지 체크를 해준다.


 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
#include <iostream>
#include <queue>
 
using namespace std;
int N, M;
int map[1001][1001];
bool visit[1001][1001];
typedef struct {
    int x, y, time;
}coordi;
queue < coordi> Q;
void input() {
    cin >> N >> M;
    for (int y = 0; y < M; y++) {
        for (int x = 0; x < N; x++) {
            cin >> map[y][x];
            if (map[y][x] == 1) {
                Q.push({ x,y,0 });
                visit[y][x] = true;
            }
        }
    }
 
}
 
int dx[] = { 0,0-1+1 };
int dy[] = { 1-1,0,0 };
int res;
 
bool check() {
    for (int y = 0; y < M; y++) {
        for (int x = 0; x < N; x++) {
            if (!map[y][x]) return false;
        }
    }
    return true;
}
int main(void) {
    input();
 
    while (!Q.empty()) {
 
        int x = Q.front().x;
        int y = Q.front().y;
        int time = Q.front().time;
        Q.pop();
        res > time ? res = res : res = time;
        for (int index = 0; index < 4; index++) {
 
            int nx = x + dx[index];
            int ny = y + dy[index];
            
            if (nx >= 0 && ny >= 0 && nx < N && ny < M) {
                if (!visit[ny][nx] && map[ny][nx] != -1) {
                    visit[ny][nx] = true;
                    map[ny][nx] = 2;
                    Q.push({ nx,ny,time + 1 });
                }
            }
        }
 
 
    }
    if (check()) {
        cout << res;
    }
    else {
        cout << -1;
    }
    return 0;
}
 
   

'알고리즘 > 완전탐색(BFS,DFS)' 카테고리의 다른 글

BOJ - 1002 ) 적록색약 JAVA  (0) 2020.01.20
BOJ -1697 ) 숨바꼭질  (0) 2020.01.19
BOJ - 5427 ) 불  (0) 2020.01.17
BOJ - 7562 ) 나이트의 이동  (0) 2020.01.17
BOJ -2589 ) 보물섬  (0) 2020.01.17
Comments