Dolphins의 HelloWorld

[백준]Baekjoon7576(BFS) 본문

Algorithm/baekjoon문제풀이

[백준]Baekjoon7576(BFS)

돌핀's 2018. 8. 16. 23:59


문제 링크 : https://www.acmicpc.net/problem/7576




#include <iostream>
#include <queue>
#include <algorithm>

using namespace std;

int arr[1000][1000];

int dx[4] = { 1,-1,0,0 };
int dy[4] = { 0,0,1,-1 };
 
int N, M;
int result;
void BFS(queue<pair<int,int>> *q)
{
	result = 1; //가장 마지막 날을 저장하기 위한 변수
	while (!(*q).empty()){
		int x = (*q).front().first;
		int y = (*q).front().second;
		(*q).pop();
		
		for (int i = 0; i < 4; i++) { //for문이 한번 돌 때마다 아직 익지 않은 인접 토마토 값이 원래 토마토 좌표 + 1이 되도록 한다.
			int nx = x + dx[i];
			int ny = y + dy[i];
			if (nx >= 0 && nx < N && ny >= 0 && ny < M) { 
				if (arr[nx][ny] == 0) {
					arr[nx][ny] = arr[x][y]+1;
					(*q).push(make_pair(nx, ny));
					if (arr[nx][ny] > result)
						result = arr[nx][ny]; //가장 값이 큰 것이 마지막 날에 익은 것이므로 저장
				}
			}
		}
	}
}
int main()
{
	scanf("%d %d", &M, &N);

	queue<pair<int, int>> q;

	for (int i = 0; i < N; i++) {
		for (int j = 0; j < M; j++) {
			scanf("%d", &arr[i][j]);
			if (arr[i][j] == 1)
				q.push(make_pair(i, j)); //값이 1인 토마토 인접 토마토부터 익기 시작하므로 큐에 미리 넣어준다.
		}
	}
	BFS(&q); // 매개변수로 값이 1인 좌표가 저장되어있는 큐 전달
	bool b = true;
	for (int i = 0; i < N; i++) {
		for (int j = 0; j < M; j++) {
			if (arr[i][j] == 0) { //만약 배열 값중 하나라도 0이라면 break
				b = false;
				break;
			}
		}
		if (!b) break;
	}
	if (b) printf("%d\n",result-1);
	else printf("-1\n");
}


'Algorithm > baekjoon문제풀이' 카테고리의 다른 글

[백준]Baekjoon11725 (트리의 부모 찾기)  (0) 2018.08.22
[백준]Baekjoon2146(DFS,BFS)  (0) 2018.08.17
[백준]Baekjoon2178(BFS)  (0) 2018.08.16
[백준]Baekjoon2667(DFS,BFS)  (0) 2018.08.16
[백준]Baekjoon9466(DFS,cycle)  (0) 2018.08.16
Comments