알고리즘/DFS BSF

DFS/BFS

2022. 2. 24. 21:08
목차
  1. 그래프
  2. 구현 방법
  3.  
  4. DFS (Depth-First Search, 깊이 우선 탐색)
  5. 동작 과정
  6. BFS (Breadth First Ssearch, 너비 우선 탐색)
  7. 동작 과정

그래프

vertex(정점)(node, 노드), edge(간선)으로 구성됨

트리도 그래프의 일종

두 노드가 연결되어 있음 == 두 노드는 인접함

 

구현 방법

인접 행렬 (Adjacency Matrix)

2차원 배열로 그래프의 연결 관계 표현함

연결된 정점은 1로, 아니면 0 (또는 무한 비용 INF) 넣기

- 무조건 2차원 배열을 만들어야 해서 불필요한 공간 필요함

인접 리스트 (Adjacency List)

연결 리스트로 그래프의 연결 관계 표현함

정점의 리스트 배열을 만들어 연결된 정점들을 배열에 넣어서 표현

연결된 정보만을 저장해서 메모리를 효율적으로 사용함

연결된 데이터 하나씩 확인해야 해서 두 노드 연결되어 있는지에 대한 정보 얻는 속도가 느림

vector<int> G[5]; //1~5까지의 정점 가진 그래프
G[1].push_back(3); //정점 1과 연결된 정점 3을 1번 배열에 넣음

 

DFS (Depth-First Search, 깊이 우선 탐색)

그래프에서 깊은 곳을 우선적으로 탐색함

스택 자료구조를 이용함 (선입후출 FILO)

 

동작 과정

- stack 사용

1. 탐색 시작 노드를 스택에 삽입 후 방문 처리를 함 (visited[n] = 1)

2. 스택의 최상단 노드에 방문하지 않은 인접 노드가 있다면 인접 노드를 스택에 넣고 방문 처리를 함, 방문하지 않은 인접 노드가 없으면 스택에서 최상단 노드를 꺼냄

3. 2번 과정을 수행할 수 없을 때까지 반복함

 

- stack 미사용 (재귀 함수)

1. 탐색 시작 노드를 dfs의 인자로 넣고 방문 처리 함

2. 노드의 인접 노드를 찾기 (for문으로)

3. 인접 노드를 인자로 한 재귀 함수 호출 (dfs)

4. 인자로 들어온 노드를 방문 처리 함

5. 2,3을 반복

 

BFS (Breadth First Ssearch, 너비 우선 탐색)

그래프에서 가까운 노드부터 탐색함

큐 자료구조를 이용함 (선입선출, FIFO)

일반적인 경우 DFS보다 실제 수행 시간이 좋음

 

동작 과정

1. 시작 노드를 큐에 삽입 후 방문 처리 함

2. 큐에서 노들르 꺼낸 후 해당 노드의 인접 노드 중 방문하지 않은 노드를 모두 큐에 삽입, 방문 처리 함

3. 2번을 반복

 

  1. 그래프
  2. 구현 방법
  3.  
  4. DFS (Depth-First Search, 깊이 우선 탐색)
  5. 동작 과정
  6. BFS (Breadth First Ssearch, 너비 우선 탐색)
  7. 동작 과정
'알고리즘/DFS BSF' 카테고리의 다른 글
  • [이코테] 실전 문제
  • 백준 2667 - 단지 번호 붙이기
  • 백준 2606 - 바이러스
  • 백준 1260 - DFS와 BFS
hahihi
hahihi
hahihi
히호 노트
hahihi
전체
오늘
어제
  • 분류 전체보기 (224)
    • 알고리즘 (114)
      • 정렬 (3)
      • 그리디 (9)
      • 구현 (35)
      • 이분 탐색 (4)
      • 탐색 (2)
      • 동적 계획법 (DP) (11)
      • DFS BSF (29)
      • 최단 경로 (5)
      • 그래프 (4)
      • 주의할 점 (4)
      • 트리 (3)
    • spring (34)
      • JPA (12)
    • DevOps (10)
      • Docker (3)
    • java (15)
      • 이펙티브자바 (4)
      • Clean Code (4)
    • git (9)
    • DB (3)
    • 앱개발 (1)
    • 유닉스 (26)
    • 네트워크 (3)
      • IT 엔지니어를 위한 네트워크 입문 (3)
    • 유니티 (1)
    • 후기 (4)
    • 누누코코 (0)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

  • Docker
  • spring
  • 이코테
  • 공통 response
  • 프로그래머스
  • 13265
  • allowPublicKeyRetrieval
  • 1868
  • 7465
  • BaseEntity
  • 입출력
  • dp
  • 팀 결성
  • JWT
  • 백준
  • 그리디 알고리즘
  • 4193
  • 숫자 조각
  • 도넛과 막대 그래프
  • SWEA

최근 댓글

최근 글

hELLO · Designed By 정상우.
hahihi
DFS/BFS
상단으로

티스토리툴바

개인정보

  • 티스토리 홈
  • 포럼
  • 로그인

단축키

내 블로그

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

블로그 게시글

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

모든 영역

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

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