티스토리 뷰

알고리즘/BOJ

[BOJ 7576] 토마토

히더 2018. 10. 2. 21:04

백준 :: BOJ :: 7576 :: 토마토


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


#include <bits/stdc++.h>

using namespace std;


struct a {

int i, j;

};

int N, M, ans, result;

int arr[1000][1000];

int di[] = { 0,0,1,-1 }, dj[] = {1,-1,0,0};

bool visited[1000][1000];

queue<a> q;


inline bool check(int i, int j) { return (i >= 0 && j >= 0 && i < N && j < M) ? true : false; }


int bfs() {

if (ans == 0) return  0;

while (!q.empty()) {

int t = q.size();

while (t--) {

auto tmp = q.front(); q.pop();

for (int d = 0; d < 4; d++) {

int ni = tmp.i + di[d], nj = tmp.j + dj[d];

if (check(ni, nj) && arr[ni][nj]==0 && !visited[ni][nj]) {

visited[ni][nj] = 1; ans--; q.push({ ni,nj });

}

}

}

result++;

if (ans == 0) return result;

}

return -1;

}


int main() {

std::ios::sync_with_stdio(false); cin.tie(0);

cin >> M >> N; ans = 0; result = 0;

for (int i = 0; i < N; i++) for (int j = 0; j < M; j++) {

cin >> arr[i][j]; 

if (arr[i][j]==1) {

q.push({ i,j }); visited[i][j] = 1;

}

else if (arr[i][j] == 0) ans++;

}

cout << bfs();

return 0;

}


'알고리즘 > BOJ' 카테고리의 다른 글

[BOJ 15685] 드래곤 커브  (0) 2018.10.07
[BOJ 14499] 주사위 굴리기  (0) 2018.10.04
[BOJ 2178] 미로탐색  (0) 2018.10.02
[BOJ 2468] 안전 영역  (0) 2018.09.18
[BOJ 2589] 보물섬  (0) 2018.09.18
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/11   »
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
글 보관함