티스토리 뷰
토마토(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
- react
- server side rendering
- 인접리스트
- 자료구조
- C
- 동적프로그래밍
- 스텍
- dfs
- 병행프로세스
- 퀵정렬
- 알고리즘
- 구조체
- 배열
- 인접행렬
- 입출력장치
- stackframe
- 재귀함수
- 클래스
- 최단경로
- 세마포어
- Java
- 교착상태
- 운영체제
- client side rendering
- javascript
- C++
- 이진탐색
- Stack
- BFS
- 소프트웨어
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
글 보관함