백준 1012

HR·2022년 4월 13일
0

알고리즘 문제풀이

목록 보기
14/50

백준 1012 : 유기농 배추

  1. 전형적인 dfs 문제

왜 틀렸을까?

#include <bits/stdc++.h>

using namespace std;

int dy[4] = {-1,0,1,0}, dx[4] = {0,1,0,-1};
int t, n, m, k;
int bat[51][51], visited[51][51];
int now_x, now_y;
int temp_x, temp_y;

void dfs(int y, int x) {
	visited[y][x]=1;
	for(int i=0; i<4; i++) { //동서남북으로 확인 
		now_y = y+dy[i];
		now_x = x+dx[i];
		
		if(now_y<0 || now_x<0 || now_y>=n || now_x>=m) { //배열 밖으로 나가는 경우 제외 
			continue;
		} 
		if(bat[now_y][now_x]==1 && !visited[now_y][now_x]) { //이미 방문했던 경우 제외 
			dfs(now_y, now_x);
		}
	}
	
	return;
}

int main() {
	ios_base::sync_with_stdio(false);
	cin.tie(NULL);
	cout.tie(NULL);
	
	cin>>t;
	
	for(int i=0; i<t; i++) {
		int ans=0;
		
		cin>>n>>m>>k;
		
		fill(&bat[0][0], &bat[0][0]+51*51, 0);
		fill(&visited[0][0], &visited[0][0]+51*51, 0);
		
		//배추 위치 입력 
		for(int j=0; j<k; j++) {
			cin>>temp_x>>temp_y;
			bat[temp_y][temp_x] = 1;
		}
		
		for(int v=0; v<n; v++) {
			for(int w=0; w<m; w++) {
				if(bat[v][w]==1 && !visited[v][w]) {
					dfs(v, w);
					ans++;
				}
			}
		}
		
		cout<<ans<<'\n';
	}
	
	return 0;
}

0개의 댓글