Mini

백준 1012 유기농배추 //구역세기는 dfs 본문

Algorithm/boj

백준 1012 유기농배추 //구역세기는 dfs

Mini_96 2023. 4. 2. 21:33

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

 

1012번: 유기농 배추

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

www.acmicpc.net

 

1. tc문제는 초기화 <=  fill함수

2. dfs는 4방탐색으로 =>  visit처리만 담당

#include <bits/stdc++.h>
using namespace std;

const int max_n = 51;
int t, n, m, k, ny,nx,ret, a[max_n][max_n], visited[max_n][max_n];
int dx[] = {-1,0,1,0};
int dy[] = {0,-1,0,1};

/*
* dfs
* 1.방문처리
* 2.for(dy,dx)
* 3.방문가능 and 미방문 -> dfs(there)
* 
*/
void dfs(int y, int x)
{
	visited[y][x] = 1;
	for (int i = 0; i < 4; ++i)
	{
		ny = y + dy[i];
		nx = x + dx[i];
		if (ny < 0 || nx < 0 || ny >= n || nx >= m) continue;

		if (a[ny][nx] == 1 && visited[ny][nx] == 0)
			dfs(ny,nx);

	}
	return;
}

int main()
{
	cin >> t ;

	for (int test_t = 0; test_t < t; ++test_t)
	{
		/*
		* tc문제는 초기화 "fill(시작,끝,값)"
		*/
		fill(&a[0][0], &a[0][0] + 51 * 51, 0);
		fill(&visited[0][0], &visited[0][0] + 51 * 51, 0);
		ret = 0;

		cin>> m >> n >> k;
		for (int b = 0; b < k; ++b)
		{
			int x=0;
			int y = 0;
			cin >> x >> y;
			a[y][x] = 1;
		}
		//입력끝

		//0,0부터 구역탐색은 dfs
		for (int i = 0; i < n; i++) {
			for (int j = 0; j < m; j++) {
				if (a[i][j] == 1 && visited[i][j]==0) {
					dfs(i, j); ret++;
				}
			}
		}
		
		cout << ret<<"\n";
		
	}
}