![[백준 C++] 1012 : 유기농 배추](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FDLDMk%2FbtsKMj7Yoda%2FtlzXdaC4qxSvl5RwKQCHkK%2Fimg.png)
[백준 C++] 1012 : 유기농 배추CSE/코딩 문제풀이2024. 11. 16. 12:53
Table of Contents
https://www.acmicpc.net/problem/1012
이 전에 풀었던 단지번호붙이기와 비슷한 유형의 그래프 탐색 문제이다.
DFS로 구현하였다.
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
vector<vector<int>> list;
vector<vector<bool>> visited;
vector<int> answer;
int dx[4] = { -1, 0, 1, 0 };
int dy[4] = { 0, 1, 0, -1 };
int M, N;
void dfs(int x, int y)
{
for (int i = 0; i < 4; i++)
{
int nextX = x + dx[i];
int nextY = y + dy[i];
if ((nextX >= 0 && nextX < M) && (nextY >= 0 && nextY < N))
{
if (!visited[nextY].at(nextX) && list[nextY].at(nextX) == 1)
{
visited[nextY].at(nextX) = true;
dfs(nextX, nextY);
}
}
}
}
void calculate()
{
int K, sum = 0;
cin >> M >> N >> K;
list = vector<vector<int>>(N, vector<int>(M, 0));
visited = vector<vector<bool>>(N, vector<bool>(M, false));
for (int i = 0; i < K; i++)
{
int x, y;
cin >> x >> y;
list[y].at(x) = 1;
}
for (int y = 0; y < N; y++)
{
for (int x = 0; x < M; x++)
{
if (!visited[y].at(x) && list[y].at(x) == 1)
{
visited[y].at(x) = true;
dfs(x, y);
sum++;
}
}
}
answer.push_back(sum);
}
int main()
{
int T;
cin >> T;
for (int i = 0; i < T; i++)
calculate();
for (int i = 0; i < answer.size(); i++)
cout << answer[i] << '\n';
return 0;
}
'CSE > 코딩 문제풀이' 카테고리의 다른 글
[백준 C++] 1679 : 숨바꼭질 (0) | 2024.11.18 |
---|---|
[백준 C++] 2178 : 미로 탐색 (0) | 2024.11.17 |
[백준 C++] 2667 : 단지번호붙이기 (0) | 2024.11.15 |
[백준 C++] 2606 : 바이러스 (2) | 2024.11.14 |
[백준 C++] 24445 : 알고리즘 수업 - 너비 우선 탐색 2 (0) | 2024.11.13 |
@NiffJB :: 개발하는 니프
CSE & GAME 개발 블로그
포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 부탁드립니다!