Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- 주린이
- 2370 c++
- 백트레킹
- 삼성SW 역량 테스트 기출문제
- 용어 정리
- C++
- 위상정렬
- 주식 용어
- DFS
- backtracking
- 브루트포스
- MySQL
- 백준 2370
- 삼성 SW 역량 테스트 기출 문제
- Programmers
- 백준 1697
- 백준 15651
- 15651
- 15651c++
- 삼성 SW역량 테스트
- 에라토스테네스의 체
- 백준알고리즘
- 백준
- 백준 알고리즘
- 주식 용어 정리
- 시장 선거 포스터 c++
- fill함수
- BFS
- DP
- 프로그래머스
Archives
- Today
- Total
빠켱이
백준 1012번 유기농 배추[C++] 본문
1012번은 특별히 어려운 점은 없고 dfs를 사용하여 이어 진부분이 몇 군데인지만 탐색 하주면 됩니다.
주의하실 점에는 여러 경우를 탐색하는 상황을 대비하여 초기화를 해주어야 하는데 저는 fill함수를 사용하여 초기화하였습니다.
#include <iostream>
#include <algorithm>
#include <vector>
using namespace std;
int map[50][50] = { 0 };
bool check[50][50] = { false };
int dx[4] = { 0,0,-1,1 };
int dy[4] = { -1,1,0,0 };
vector<int> v;
int t, m, n, k;
void dfs(int x, int y);
int main() {
int x, y;
scanf("%d", &t);
v.resize(t);
for (int z = 0; z < t; z++) {
scanf("%d %d %d", &m, &n, &k);
fill(&check[0][0], &check[0][0] + sizeof(check), false);
fill(&map[0][0], &map[0][0] + 50*50, 0);
for (int i = 0; i < k; i++) {
scanf("%d %d", &x, &y);
map[x][y] = 1;
}
for (int i = 0; i < m; i++) {
for (int j = 0; j < n; j++) {
if (check[i][j] == false && map[i][j] == 1) {
dfs(i, j);
v[z]++;
}
}
}
}
for (int i = 0; i < t; i++) {
printf("%d\n", v[i]);
}
return 0;
}
void dfs(int x, int y) {
check[x][y] = true;
for (int i = 0; i < 4; i++) {
int xx = x + dx[i];
int yy = y + dy[i];
if (xx >= 0 && xx < m && yy >= 0 && yy < n) {
if (check[xx][yy] == false && map[xx][yy] == 1) {
dfs(xx, yy);
}
}
}
}
'알고리즘 > 백준 알고리즘' 카테고리의 다른 글
백준 9461 파도반 수열[C++] (0) | 2020.09.14 |
---|---|
백준 2579번 계단오르기[C++] (0) | 2020.09.13 |
백준 2748번 피보나치수[C++] (0) | 2020.09.12 |
백준 2178번 미로탐색[C++] (0) | 2020.09.12 |
백준 2667번 단지번호붙이기[C++] (0) | 2020.09.09 |
Comments