250x250
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 |
Tags
- Calendar
- 스택
- map
- union_find
- 힙덤프
- 리소스모니터링
- sql
- dfs
- NIO
- math
- date
- List
- 큐
- Java
- string
- BFS
- set
- spring boot
- Union-find
- alter
- Properties
- GC로그수집
- html
- JPA
- CSS
- javascript
- 스프링부트
- priority_queue
- scanner
- deque
Archives
- Today
- Total
매일 조금씩
백준 1012번 : 유기농 배추 [C++] 본문
728x90
반응형
DFS를 활용한 문제다.
기본 DFS에서 동서남북으로 붙어있는 배추들이 몇 세트 인지 세는 vector를 추가하면 된다.
#include <iostream>
#include <deque>
#include <vector>
#include <cstring> //memset
using namespace std;
const int MAX = 50;
typedef struct {
int y, x;
}Dir;
Dir moveDir[4] = { {1,0},{-1,0},{0,1},{0,-1} };
int T, N, M, K;
int farm[MAX][MAX];
bool visited[MAX][MAX];
vector<int> v;
int cnt;
void DFS(int y, int x) {
visited[y][x] = true;
for (int i = 0; i < 4; i++) {
int nextY = y + moveDir[i].y;
int nextX = x + moveDir[i].x;
if (0 <= nextY && nextY < N && 0 <= nextX && nextX < M) {
if (farm[nextY][nextX] == 1 && visited[nextY][nextX] == false) {
DFS(nextY, nextX);
}
}
}
}
int main(void) {
cin >> T;
for (int i = 0; i < T; i++) {
cnt = 0;
memset(farm, 0, sizeof(farm));
memset(visited, false, sizeof(visited));
cin >> M >> N >> K;
int a, b;
for (int j = 0; j < K; j++) {
cin >> a >> b;
farm[b][a] = 1;
}
for (int y = 0; y < N; y++) {
for (int x = 0; x < M; x++) {
if (farm[y][x] == 1 && visited[y][x] == false) {
cnt++;
DFS(y, x);
}
}
}
v.push_back(cnt);
}
for (int i = 0; i < v.size(); i++) {
cout << v[i] << endl;
}
return 0;
}
728x90
반응형
'알고리즘 > Graph (DFS, BFS)' 카테고리의 다른 글
백준 11724번 : 연결 요소의 개수 [C++] (0) | 2020.08.08 |
---|---|
백준 1697번 : 숨바꼭질 [C++] (0) | 2020.08.08 |
백준 7576번 : 토마토 (0) | 2020.08.07 |
백준 2667번 : 단지 번호 붙이기 (0) | 2020.08.07 |
백준 2178번 : 미로탐색 (0) | 2020.08.07 |