반응형
문제
해설
dfs를 이용한 문제해결
코드
#include<iostream>
#include<cstring>
using namespace std;
int map[51][51];
bool visit[51][51];
int dx[] = { 0,0,-1,1 };
int dy[] = { 1,-1,0,0 };
int T, M, N, K;
int cnt;
int column, row;
void dfs(int x, int y) {
visit[x][y] = true;
for (int k = 0; k < 4; k++) {
int nx = x + dx[k];
int ny = y + dy[k];
if (0 <= nx && nx < N && 0 <= ny && ny < M) {
if (map[nx][ny] && !visit[nx][ny]) {
visit[nx][ny] = true;
dfs(nx, ny);
}
}
}
}
int main() {
cin >> T;
while (T--)
{
//지렁이 초기화
cnt = 0;
//좌표 초기화
memset(map, 0, sizeof(map));
memset(visit, 0, sizeof(visit));
cin >> M >> N >> K;
for (int i = 0; i < K; i++) {
cin >> column >> row;
if (0 <= column && column < M && 0 <= row && row < N)
{
map[row][column] = 1;
}
}
for (int i = 0; i < N; i++) { //세로
for (int j = 0; j < M; j++) { //가로
if (map[i][j] && !visit[i][j]) {
dfs(i, j);
cnt++;
}
}
}
cout << cnt<<endl;
}
return 0;
}
반응형
'Development > Algorithm' 카테고리의 다른 글
[BOJ] 2231. 분해합 (0) | 2020.10.02 |
---|---|
[BOJ] 2309. 일곱 난쟁이 (0) | 2020.09.30 |
[SWEA] 2007. 패턴 마디의 길이 (0) | 2020.09.27 |
[SWEA] 1926. 간단한 369게임 (0) | 2020.09.27 |
[SWEA] 2071. 평균값 구하기 (0) | 2020.09.25 |