DeJa
Techvu
DeJa
전체 방문자
48,644
오늘
4
어제
65
  • Techvu (60)
    • DesignPatterns (3)
      • 생성 (0)
      • 구조 (1)
      • 행동 (2)
    • Refactoring (0)
    • DataStructures (0)
    • Algorithms (24)
      • 기본 지식 (12)
      • 문제 풀이 (12)
    • OOP (0)
    • TDD (2)
    • DDD (0)
    • Programming Languages (9)
      • Java (9)
      • Kotlin (0)
    • Spring (1)
    • JPA (7)
    • Web (1)
      • 기본 지식 (1)
      • 실무 경험 (0)
    • CS (12)
      • Network (1)
      • OS (8)
      • DataBase (3)
      • Server (0)
    • Git (1)
    • Conferences (0)

블로그 메뉴

  • 홈
  • 태그
  • 미디어로그
  • 위치로그
  • 방명록

공지사항

  • Study
  • GitHub
  • Medium Blog

인기 글

  • 자바 버전별 역사 및 특징
    2022.01.12
    자바 버전별 역사 및 특징
  • 깃허브 사용 방법
    2021.12.15
    깃허브 사용 방법
  • 스키마(Schema)
    2022.01.08
    스키마(Schema)
  • 동시성 이슈(Concurrency Issue)
    2022.03.20
    동시성 이슈(Concurrency Issue)
  • 재귀 함수(Recursion Function)
    2021.12.08
    재귀 함수(Recursion Function)

태그

  • java
  • 알고리즘
  • JPA
  • Spring
  • CS
  • web
  • 디자인패턴
  • TDD
  • DATABASE
  • OS
  • network

최근 댓글

  • 글 잘읽고 가요.
    아이폰
  • 컴파일러자체에서 꼬리재귀를 지원하지 않으니 static으로⋯
    aaa
  • 압도적 감사
    ㅇㅇㅇ

최근 글

  • Write a test code right now
    2022.03.24
    Write a test code right now
  • 동시성 이슈(Concurrency Issue)
    2022.03.20
    동시성 이슈(Concurrency Issue)
  • POJO, JavaBean, Entity, VO, DTO
    2022.02.08
    POJO, JavaBean, Entity, VO, DTO
  • TDD with Agile
    2022.02.05
    TDD with Agile
  • Java Stream 기초
    2022.01.23
    Java Stream 기초

티스토리

hELLO · Designed By 정상우.
DeJa

Techvu

깊이 우선 탐색(DFS)
Algorithms/기본 지식

깊이 우선 탐색(DFS)

2022. 1. 3. 20:51
728x90

깊이 우선 탐색(DFS)

DFS(Depth-First Search) 는 깊이 우선 탐색이라고 부르며, 그래프에서 깊은 부분을 우선적으로 탐색하는 알고리즘이다.

DFS 는 Stack 자료구조를 사용하며 Stack 을 이용하기 때문에 재귀 함수를 이용하면 쉽게 DFS 구현을 할 수 있다.

재귀와 Stack 에 대해서 잘 모르겠으면 해당 링크를 통해서 배우고 오자.

동작 과정

Step1

Step1. 시작 노드를 스택에 넣고 방문 처리한다.

Step2

Step2. 방문하지 않은 인접 노드 중에서 번호가 가장 낮은 곳을 방문하고 해당 노드를 스택에 넣어 방문 처리 한다.

Step3

Step3. 위 과정을 반복한다.

구현

public class Main {

    public static boolean[] visited = new boolean[9];
    public static List<List<Integer>> graph = new ArrayList<>();

    // Depth-First Search 
    public static void dfs(int x) {
        // 현재 노드를 방문 처리
        visited[x] = true;
        System.out.print(x + " ");
        // 현재 노드와 연결된 다른 노드를 재귀적으로 방문
        for (int i = 0; i < graph.get(x).size(); i++) {
            int y = graph.get(x).get(i);
            if (!visited[y]) { 
              dfs(y);
            }
        }
    }

    public static void main(String[] args) {
        // 그래프 초기화
        for (int i = 0; i < 9; i++) {
            graph.add(new ArrayList<Integer>());
        }

        // 노드 1에 연결된 노드 정보 저장 
        graph.get(1).add(2);
        graph.get(1).add(3);

        // 노드 2에 연결된 노드 정보 저장 
        graph.get(2).add(5);
        graph.get(2).add(8);

        // 노드 3에 연결된 노드 정보 저장 
        graph.get(3).add(4);
        graph.get(3).add(6);

        // 노드 4에 연결된 노드 정보 저장 
        graph.get(4).add(7);

        // dfs 시작 
        dfs(1);
    }
}

References

  • 이것이 코딩 테스트다
728x90
저작자표시 비영리 동일조건
  • 카카오스토리
  • 트위터
  • 페이스북

'Algorithms > 기본 지식' 카테고리의 다른 글

조합(Combination)  (0) 2022.01.03
부분 집합 구하기(DFS)  (0) 2022.01.03
위상 정렬  (0) 2021.12.14
신장 트리와 크루스칼 알고리즘  (0) 2021.12.13
서로소 집합  (0) 2021.12.12
    'Algorithms/기본 지식' 카테고리의 다른 글
    • 조합(Combination)
    • 부분 집합 구하기(DFS)
    • 위상 정렬
    • 신장 트리와 크루스칼 알고리즘
    알고리즘
    DeJa
    DeJa
    Tech Blog
    댓글쓰기
    부분 집합 구하기(DFS)
    다음 글
    부분 집합 구하기(DFS)
    위상 정렬
    이전 글
    위상 정렬

    티스토리툴바