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, 0, sizeof(map)); memset(check, false, sizeof(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호출할 때 가로, 세로 순서를 어떻게 할 것인지?
백준 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
머신러닝/딥러닝 관련 글을 포스팅할 예정입니다 :)