[BaekJoon] 백준 7576번 토마토
문제: https://www.acmicpc.net/problem/7576
내코드
- BFS 문제
- 처음에 익어있는 토마토의 위치를 전부 큐에 넣고 시작해야하는 문제
- 크게 어렵진 않았다.
- 아래는 아이패드에 정리한 내용
#include <iostream>
#include <stdio.h>
#include <string>
#include <queue>
#include <utility>
using namespace std;
int m, n, maxN = 0;
int arr[1000][1000];
bool visited[1000][1000] = { false, };
queue<pair<pair<int, int>, int>> qu;
pair<pair<int, int>, int> cur;
void isNear(int a, int b) {
if (a < 0 || b < 0 || a >= n || b >= m) return;
if (arr[a][b] == 0 && visited[a][b] == false) {
qu.push(make_pair(make_pair(a, b), cur.second + 1));
visited[a][b] = true;
maxN = (maxN < cur.second + 1) ? cur.second + 1 : maxN;
}
}
int main(void)
{
ios::sync_with_stdio(false);
cin.tie(0);
cin >> m >> n;
for (int i = 0; i < n; i++) {
for (int j = 0; j < m; j++) {
cin >> arr[i][j];
}
}
for (int i = 0; i < n; i++) {
for (int j = 0; j < m; j++) {
if (arr[i][j] == 1) {
qu.push(make_pair(make_pair(i, j), 0));
visited[i][j] = true;
}
}
}
if (qu.empty()) {
cout << 0;
return 0;
}
while (!qu.empty()) {
cur = qu.front();
int x = cur.first.first;
int y = cur.first.second;
qu.pop();
isNear(x, y-1);
isNear(x, y + 1);
isNear(x + 1, y);
isNear(x - 1, y);
}
for (int i = 0; i < n; i++) {
for (int j = 0; j < m; j++) {
if (arr[i][j] != -1 && visited[i][j] == false) {
cout << -1;
return 0;
}
}
}
cout << maxN;
return 0;
}
참고
728x90
반응형
'CS > Algorithm 문제' 카테고리의 다른 글
[BaekJoon] 백준 2667번 단지번호 붙이기 (0) | 2020.03.10 |
---|---|
[BakJoon] 백준 7569번 토마토 (0) | 2020.03.08 |
[BaekJoon] 백준 1697번 숨바꼭질 (0) | 2020.02.28 |
[BaekJoon] 백준 2178번 미로탐색 (0) | 2020.02.25 |
[BaekJoon] 백준 1926번 그림 (0) | 2020.02.21 |