티스토리 뷰
728x90
반응형
토마토 문제는 BFS를 이용하는 문제입니다. BFS의 flood fill 기법을 사용하는 문제로 여러 개의 루트 노드에서 BFS를 수행한다는 점에서 다른 BFS 문제와의 차이를 확인할 수 있습니다. 문제를 해결하기 위해 BFS를 수행하기 직전 처음에 큐에 여러 개의 루트 노드를 삽입한다는 점을 제외하면 이외의 BFS flood fill 기법 응용 문제의 해결 방식과 매우 유사합니다.
BFS 문제에 대한 전형적인 구현 방식은 다음의 글에서 확인할 수 있습니다.
2021.09.07 - [알고리즘/문제풀이] - [알고리즘/문제풀이][BOJ 1260번] DFS와 BFS
문제를 해결하기 위해 작성한 코드를 다음과 같습니다.
#include<stdio.h>
#pragma warning(disable : 4996)
int dx[] = {0,0,-1,1};
int dy[] = { 1,-1,0,0};
int N, M;
int map[1200][1200];
int wp, rp;
int cnt = 0;
struct Queue {
int x, y, time;
};
struct Queue queue[1000200];
struct Queue temp;
void enqueue(int x, int y, int time) {
queue[wp].x = x;
queue[wp].y = y;
queue[wp].time = time;
wp++;
}
struct Queue dequeue() {
return queue[rp++];
}
int empty() {
return wp == rp;
}
int main(void) {
scanf("%d %d", &M, &N);
for (int i = 0; i < N; i++) {
for (int j = 0; j < M; j++) {
scanf("%d", &map[i][j]);
if (map[i][j] == 1) {
enqueue(j, i, 0);
}
else if (map[i][j] == 0) {
cnt++;
}
}
}
if (cnt == 0) {
printf("0\n");
return 0;
}
while (!empty()) {
temp = dequeue();
for (int i = 0; i < 4; i++) {
int nx = temp.x + dx[i];
int ny = temp.y + dy[i];
if ((nx < 0) || (nx >= M)) continue;
if ((ny < 0) || (ny >= N)) continue;
if (map[ny][nx] != 0) continue;
enqueue(nx, ny, temp.time + 1);
map[ny][nx] = 1;
}
}
cnt = 0;
for (int i = 0; i < N; i++) {
for (int j = 0; j < M; j++) {
if (map[i][j] == 0) {
printf("%d\n", -1);
return 0;
}
}
}
printf("%d\n", temp.time);
}
문제의 지문은 다음의 링크에서 확인할 수 있습니다.
728x90
반응형
'알고리즘 > 문제풀이' 카테고리의 다른 글
[알고리즘/문제풀이][BOJ 1697번] 숨바꼭질 (0) | 2021.09.14 |
---|---|
[알고리즘/문제풀이][BOJ 7569번] 토마토 (0) | 2021.09.13 |
[알고리즘/문제풀이][BOJ 2178번] 미로 탐색 (0) | 2021.09.11 |
[알고리즘/문제풀이] [BOJ 1012번] 유기농 배추 (0) | 2021.09.10 |
[알고리즘/문제풀이][BOJ 2667번] 단지번호붙이기 (0) | 2021.09.09 |
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- 애니메이션
- 알고리즘
- 너비우선탐색
- 베릴로그
- 큐
- Push
- 백준
- 스택
- 구현
- 재귀함수
- 이진탐색
- 정렬
- 구조체
- backtracking
- recursive
- 영화
- 건이의 특제 떡국 끓이기
- 영어 어휘
- BOJ
- C언어
- 메이플스토리
- 백트래킹
- C++
- Verilog
- gem5
- BFS
- Git
- 완전탐색
- 취미
- 이분법
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
글 보관함
반응형
250x250