알고리즘/PS

[C++] 백준 1012 : 유기농 배추

BigmacGood 2022. 3. 17. 17:55

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

 

1012번: 유기농 배추

차세대 영농인 한나는 강원도 고랭지에서 유기농 배추를 재배하기로 하였다. 농약을 쓰지 않고 배추를 재배하려면 배추를 해충으로부터 보호하는 것이 중요하기 때문에, 한나는 해충 방지에 

www.acmicpc.net

 

백준 1012번 유기농 배추를 풀어봤습니다.

테스트케이스를 반복할 때마다 visited와 map배열을 초기화 해줘야합니다.

DFS 알고리즘으로 간단하게 풀 수 있습니다.

 

아래는 전체 코드입니다.

#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;

bool visited[50][50];
int map[50][50];
int t, m, n, k;

int dx[4] = { -1,0,1,0 };
int dy[4] = { 0,-1,0,1 };

void DFS(int x,int y) {
	visited[x][y] = 1;

	for (int i = 0; i < 4; i++) {
		int xx = x + dx[i];
		int yy = y + dy[i];

		if (xx >= 0 && yy >= 0 && xx < m && yy < n && visited[xx][yy] == 0 && map[xx][yy] == 1) {
			DFS(xx, yy);
		}
	}
}

int main() {
	int tempX, tempY;

	cin >> t;

	while (t--) {

		// Init count and map, visited list
		int count = 0;
		for (int i = 0; i < m; i++) {
			for (int j = 0; j < n; j++) {
				map[i][j] = 0;
				visited[i][j] = 0;
			}
		}
		
		cin >> m >> n >> k;
		for (int i = 0; i < k; i++) {
			cin >> tempX >> tempY;
			map[tempX][tempY] = 1;
		}

		for (int i = 0; i < m; i++) {
			for (int j = 0; j < n; j++) {
				if (map[i][j]) {
					if (visited[i][j] == 0) {
						DFS(i, j);
						count++;
					}
				}
			}
		}

		cout << count << '\n';
	}

	return 0;
}

 

'알고리즘 > PS' 카테고리의 다른 글

[C++] 백준 7576 : 토마토  (0) 2022.03.18
[C++] 백준 2178 : 미로찾기  (0) 2022.03.18
[C++] 백준 2667 : 단지번호붙이기  (0) 2022.03.17
[C++] 백준 2606 : 바이러스  (0) 2022.03.15
[C++] 백준 1260 : DFS와 BFS  (0) 2022.03.15