안녕하세요.

여행벌입니다.


https://www.acmicpc.net/problem/1012

 

1012번: 유기농 배추

차세대 영농인 한나는 강원도 고랭지에서 유기농 배추를 재배하기로 하였다. 농약을 쓰지 않고 배추를 재배하려면 배추를 해충으로부터 보호하는 것이 중요하기 때문에, 한나는 해충 방지에 효과적인 배추흰지렁이를 구입하기로 결심한다. 이 지렁이는 배추근처에 서식하며 해충을 잡아 먹음으로써 배추를 보호한다. 특히, 어떤 배추에 배추흰지렁이가 한 마리라도 살고 있으면 이 지렁이는 인접한 다른 배추로 이동할 수 있어, 그 배추들 역시 해충으로부터 보호받을 수 있다. (

www.acmicpc.net

[알고리즘설계]

BFS 탐색을 하면서 탐색한 공간은 2로 바꿔주고, BFS탐색을 시행한 횟수를 출력합니다.

#include<iostream>
#include<queue>

using namespace std;

int map[50][50];
void BFS(int, int,int, int);

int main(void) {
	ios::sync_with_stdio(false);
	cin.tie(0);

	int t;
	cin >> t;
	while (t--) {
		for (int i = 0; i < 50; i++)
			for (int j = 0; j < 50; j++)
				map[i][j] = 0;
		int row, column, k, x, y, count = 0;
		cin >> row >> column >> k;
		for (int i = 0; i < k; i++) {
			cin >> x >> y;
			map[x][y] = 1;
		}
		for (int i = 0; i < row; i++) {
			for (int j = 0; j < column; j++) {
				if (map[i][j] == 1){
					BFS(i, j, row, column);
					count++;
				}
			}
		}
		cout << count << '\n';
	}
}

void BFS(int i, int j, int row, int column) {
	int x_dir[4] = { -1, 0, 1, 0 };
	int y_dir[4] = { 0, 1 , 0 , -1 };
	queue<int> x;
	queue<int> y;
	x.push(i);
	y.push(j);
	map[i][j] = 2;
	while (!x.empty()) {
		int x1 = x.front();
		int y1 = y.front();
		x.pop(), y.pop();
		for (int k = 0; k < 4; k++) {
			int next_x = x1 + x_dir[k];
			int next_y = y1 + y_dir[k];
			if (0 <= next_x && next_x < row && 0 <= next_y && next_y < column && map[next_x][next_y] == 1) {
				x.push(next_x);
				y.push(next_y);
				map[next_x][next_y] = 2;
			}
		}
	}
	return;
}

열심히 공부하고 노력하고 있는 꿈 많은 예비 개발자입니다.

혼자서 공부한 내용을 정리하고 포스팅하다 보니 틀린 내용이 있을 수도 있습니다.

많은 조언과 가르침 주실 분은 댓글로 자유롭게 남겨주셔도 좋을 것 같습니다! 

감사합니다.

'Problem Solving > BOJ' 카테고리의 다른 글

[BOJ] 1003 - 피보나치 함수  (0) 2019.08.22
[BOJ] 1697 - Catch That Cow  (0) 2019.08.21
[BOJ] 1009 - 분산처리  (0) 2019.08.21
[BOJ] 1002 - 터렛  (0) 2019.08.21
[BOJ] 17174 - 전체 계산 횟수  (0) 2019.08.21

+ Recent posts