티스토리 뷰
토마토(BFS)
#include <iostream>
#include <vector>
#include <stdlib.h>
#include <queue>
/* run this program using the console pauser or add your own getch, system("pause") or input loop */
using namespace std;
int dx[4] = {0, 1, 0, -1};
int dy[4] = {-1, 0, 1, 0};
int k, m, n, res=-2147000000, map[1010][1010], dis[1010][1010];
struct Loc {
int x;
int y;
Loc(int a, int b){
x = a;
y = b;
}
};
queue<Loc> Q;
int main() {
//freopen("input.txt", "rt", stdin);
scanf("%d %d", &m, &n);
for(int i=1; i<=n; i++){
for(int j=1; j<=m; j++){
scanf("%d", &map[i][j]);
if(map[i][j]==1){
Q.push(Loc(i, j));
}
}
}
while(!Q.empty()){
Loc loc =Q.front();
Q.pop();
for(k=0; k<4; k++){
int xx = loc.x + dx[k];
int yy = loc.y + dy[k];
if(map[xx][yy]==0 && xx<=n && xx>=1 && yy<=m && yy>=1){
Q.push(Loc(xx, yy));
map[xx][yy]=1;
dis[xx][yy]=dis[loc.x][loc.y]+1;
}
}
}
int f=1;
for(int i=1; i<=n; i++){
for(int j=1; j<=m; j++){
if(map[i][j]==0) f=0;
}
}
if(f==1){
for(int i=1; i<=n; i++){
for(int j=1; j<=m; j++){
if(res<dis[i][j]) res=dis[i][j];
}
}
printf("%d\n", res);
}
else printf("-1");
return 0;
}
넓이우선탐색문제이다.
map을 입력받으면서 1이면 큐에 push한다. push된 값들을 하나씩 꺼내면서 큐에 깂이 남아있지 않을 때까지
값들을 꺼내면서 1로 체크하고 큐에 push한다.
동시에 dis배열의 체크한 좌표에 지금까지의 값에 1을 더한다.
이렇게 큐에 남는값이 없을 때까지 반복해서 dis배열에 값을 넣어준다.
만약 이러한 과정이 끝났는데도 0이 남아있다면 그것은 토마토가 모두 익지 못하는 상황이므로 -1을 출력해주고
0이 남아있지 않다면 dis배열을 돌면서 가장 큰 값을 찾아서 프린트한다.
'lecture > algorithm - c++' 카테고리의 다른 글
[c++] 네임스페이스(namespace), using namespace std (0) | 2021.01.31 |
---|---|
[c++] 라이언킹 심바(BFS) (0) | 2021.01.30 |
[c++] 섬나라 아일랜드, 미로의 최단거리통로(BFS) (0) | 2021.01.26 |
[c++] 수식만들기(DFS) (0) | 2021.01.24 |
[c++] 피자배달거리(DFS활용) (0) | 2021.01.24 |
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- 퀵정렬
- C++
- react
- 클래스
- BFS
- 병행프로세스
- 최단경로
- 동적프로그래밍
- javascript
- 자료구조
- 운영체제
- 인접리스트
- stackframe
- Stack
- server side rendering
- 구조체
- client side rendering
- 교착상태
- dfs
- 소프트웨어
- 알고리즘
- 인접행렬
- 이진탐색
- 스텍
- Java
- C
- 입출력장치
- 재귀함수
- 세마포어
- 배열
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
글 보관함