[C++] 백준 1012 유기농 배추 DFS, BFS

2021. 3. 29. 15:28·Algorithm/Baekjoon
#include <iostream>
#include <vector>
#include <cstring>

#define MAX_LENGTH 50

using namespace std;

bool node[MAX_LENGTH][MAX_LENGTH];
bool visited[MAX_LENGTH][MAX_LENGTH];
int width, height, counts, result;


void DFS(int x, int y);

int main()
{
	int T;

	cin >> T;

	for (int i = 0; i < T; i++)
	{
		cin >> width >> height >> counts;

		result = 0;
		memset(node, NULL, sizeof(node));
		memset(visited, NULL, sizeof(visited));

		for (int j = 0; j < counts; j++)
		{
			int temp[2];
			cin >> temp[0] >> temp[1];

			node[temp[0]][temp[1]] = true;
		}

		for (int j = 0; j < width; j++)
		{
			for (int k = 0; k < height; k++)
			{
				if (node[j][k] && visited[j][k] == false)
				{
					DFS(j, k);
					result += 1;
				}
			}
		}

		cout << result << "\n";
	}

}

void DFS(int x, int y)
{
	if (node[x][y] == true && visited[x][y] == false)
	{
		visited[x][y] = true;

		if (x + 1 < width)
		{
			DFS(x + 1, y);
		}

		if (x - 1 >= 0)
		{
			DFS(x - 1, y);
		}

		if (y + 1 < height)
		{
			DFS(x, y + 1);
		}

		if (y - 1 >= 0)
		{
			DFS(x, y - 1);
		}
	}
}

 

풀이

  1. DFS를 사용하여 한 정점의 상하좌우로 이동한다.
  2. 없을 시에 그 구역의 리스트는 모두 순회한 것.
  3. 모두 순회하였다면 방문 횟수를 증가한다.

 

주의사항

  1. 상하좌우를 갈 때에 최대범위를 넘지 않도록 한다.
  2. 모든 정점의 붙어있는 리스트를 검색할 수 있도록 x * y를 모두 검색해준다.
  3. 밭의 지렁이의 최대 개수를 구했다면 꼭 모든 변수들을 다시 초기화해준다.

 

 

한 줄로 되어 있는 리스트들을 보다가 두 정점을 이용한 것을 보니 다음 리스트로 이어져있는 정보가 없어서 당황했지만 상하좌우로 움직여야 된다는 조건을 보고 풀게되었다.

저작자표시 (새창열림)

'Algorithm > Baekjoon' 카테고리의 다른 글

[C++] 백준 10282 해킹 다익스트라알고리즘  (0) 2021.04.19
[C++] 백준 1325 효율적인 해킹 BFS, DFS  (0) 2021.03.30
[C++] 백준 2606 바이러스 DFS, BFS  (0) 2021.03.29
[C++] 백준 1697 숨바꼭질 BFS  (0) 2021.03.26
[C++] 백준 1260 DFS와 BFS  (0) 2021.03.25
'Algorithm/Baekjoon' 카테고리의 다른 글
  • [C++] 백준 10282 해킹 다익스트라알고리즘
  • [C++] 백준 1325 효율적인 해킹 BFS, DFS
  • [C++] 백준 2606 바이러스 DFS, BFS
  • [C++] 백준 1697 숨바꼭질 BFS
chanheess
chanheess
'왜' 그렇게 했는가?에 대한 생각으로 공부 및 작업의 저장관리
  • chanheess
    왜 그렇게 생각했는가?
    chanheess
  • 전체
    오늘
    어제
    • 분류 전체보기
      • Backend Programming
      • Game Programming
        • Unreal
        • DirectX
      • C++
        • Memo
        • Basic
        • Effective Modern
      • Java
      • Algorithm
        • Memo
        • Baekjoon
        • Programmers
        • HackerRank, LeetCode
      • Data Structure
      • Design Pattern
      • Etc
        • Memo
        • Daily Log
        • Book
  • 최근 글

  • 최근 댓글

  • 태그

    c++ 기초 플러스
    알고리즘
    티스토리챌린지
    JPA
    spring
    백준
    프로그래머스
    JWT
    dfs
    dp
    오블완
    위클리 챌린지
    SpringSecurity
    Java
  • hELLO· Designed By정상우.v4.10.0
chanheess
[C++] 백준 1012 유기농 배추 DFS, BFS

개인정보

  • 티스토리 홈
  • 포럼
  • 로그인
상단으로

티스토리툴바

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.