백준 1012 유기농 배추



1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
#define _CRT_SECURE_NO_WARNINGS
#include <iostream>
#include <cstring>
using namespace std;
 
int m, n, k;
int map[51][51];
bool check[51][51];
 
int dx[] = { 1,-1,0,0 };
int dy[] = { 0,0,1,-1 };
 
void dfs(int y, int x) {
    
    check[y][x] = true;
    for (int t = 0; t < 4; t++) {
        int nx = x + dx[t];
        int ny = y + dy[t];
        if (0 <= nx && nx < m && 0 <= ny && ny < n) {
            if (!check[ny][nx] && map[ny][nx] == 1) {
                dfs(ny, nx);
            }
        }
    }
}
 
int solve() {
    int num = 0;
    for (int i = 0; i < n; i++) {
        for (int j = 0; j < m; j++) {
            if (!check[i][j] && map[i][j] == 1) {
                dfs(i, j);
                num += 1;
            }
        }
    }
    return num;
}
 
int main() {
    int t;
    scanf("%d"&t);
    while (t--) {
        memset(map, 0sizeof(map));
        memset(check, falsesizeof(check));
        scanf("%d %d %d"&m, &n, &k);
        for (int i = 0; i < k; i++) {
            int x, y;
            scanf("%d %d"&x, &y);
            map[y][x] = 1;
        }
        printf("%d\n", solve());
    }
    return 0;
}
cs




dfs 기본 문제.


주의할 것은 배열을 사용할 때와 dfs호출할 때 가로, 세로 순서를 어떻게 할 것인지?


'Algorithm' 카테고리의 다른 글

백준 2468 안전 영역  (0) 2018.05.17
백준 11724 연결 요소의 개수  (0) 2018.05.17
백준 2667 단지번호붙이기  (0) 2018.05.17
백준 2583 영역 구하기  (0) 2018.05.17
백준 1260 DFS와 BFS  (0) 2018.05.16
더보기

댓글,

jayharvey

머신러닝/딥러닝 관련 글을 포스팅할 예정입니다 :)