문제 풀이
나의 코드
#include <iostream>
#include <cstring>
using namespace std;
int chk[51][51];
int map[51][51];
int dx[4] = {0, 1, 0 ,-1};
int dy[4] = {1, 0, -1, 0};
void DFS(int x, int y){
for(int i=0; i<4; i++) {
if (chk[x+dx[i]][y+dy[i]] == 0 && map[x+dx[i]][y+dy[i]] == 1) {
chk[x+dx[i]][y+dy[i]] = 1;
DFS(x+dx[i], y+dy[i]);
}
}
}
int main(){
int t, m, n, k, a, b, cnt = 0;
cin >> t;
for(int i=0; i<t; i++){
cin >> m >> n >> k;
// 배추의 갯수만큼 해당 x,y좌표에 배추 입력받기
for(int j=0; j<k; j++){
cin >> a >> b;
map[a][b] = 1;
}
if(k == 1){
cout << 1 << endl;
continue;
}
// 아직 방문하지 않았고, 배추가 심어져 있는곳에서 DFS 시작
// DFS가 종료되면 ( 한 지점에서 인접한 지점을 모두 방문했을때)
// cnt(배추지렁이의 수)를 1씩 증가시킨다.
for(int x=0; x<n; x++){
for(int y=0; y<m; y++){
if(chk[y][x] == 0 && map[y][x] == 1){
chk[y][x] = 1;
DFS(y, x);
cnt++;
}
}
}
cout << cnt << endl;
cnt = 0;
memset(chk, 0, sizeof(chk));
memset(map, 0, sizeof(map));
}
return 0;
}