깊이 우선 탐색_DFS

2021. 3. 25. 15:28·Algorithm/Memo
#include <iostream>
#include <vector>
#include <tuple>
#include <algorithm>
using namespace std;

const int N = 6;
vector<int> number[N];
bool visited[N]{false};

void DFS(int curr);

int main()
{
	ios::sync_with_stdio(false);
	
    //무방향 리스트
	number[1].push_back(2);
	number[1].push_back(4);
	number[2].push_back(1);
	number[2].push_back(3);
	number[2].push_back(5);
	number[3].push_back(2);
	number[3].push_back(5);
	number[4].push_back(1);
	number[5].push_back(2);
	number[5].push_back(3);
    
    //인접 리스트
    /*number[1].push_back(2);
	number[1].push_back(4);
	number[2].push_back(3);
	number[2].push_back(5);
	number[3].push_back(5);*/

	DFS(1);


	for (int i = 0; i < N; i++)
	{
		cout << visited[i] << "\n";
	}
	
}

void DFS(int curr)
{
	visited[curr] = true;
	cout << curr << "\n";

	for (int i = 0; i < number[curr].size(); i++)
	{
		int next = number[curr][i];	//현재 노드의 연결된 노드의 수
		if (visited[next] == true) continue;	//노드를 갔던곳이면 가지않는다.

		DFS(next);
	}
}
  • 무방향 리스트는 현재 노드와 다음노드, 다음노드와 현재노드를 같이 저장한다.
    -  number[a].push_back(b); number[b].push_back(a);

  • 인접 리스트는 현재 노드와 연결되어 있는 곳의 방향으로 나아간다.
    - 1 -> 2
    - 1 -> 4
    - 2 -> 3
    - 2 -> 5
    - 3 -> 5
  • DFS는 방문한 곳은 다시 방문하지않고 순서대로 방문하는데 위 함수의 순서대로 진행하면
  • 1 -> 2 -> 3 -> 5
  • 1 <- 2 <- 3 <- 5     //들어온 순으로 다시 되돌아간다.
  • 1 -> 4
  • 위 순서대로 진행되는데 1, 2, 3, 5, 4가 된다. 방문한 노드는 다시 방문을 하지 않는다.
  • 결국 첫 단계의 노드에 있는 다음 단계의 노드들을 쭉 타고 들어간 뒤 더 이상 갈 곳이 없으면
    다시 돌아와서 첫 단계에 있는 다른 노드의 다음 단계들을 쭉 타고 들어간다.

 

 

실행 

1
2
3
5
4
0
1
1
1
1
1

으로 나온다.

저작자표시 (새창열림)

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

재귀함수로 만드는 합  (0) 2021.06.08
다익스트라 알고리즘  (0) 2021.04.19
너비 우선 탐색 BFS  (0) 2021.03.25
힙  (0) 2021.02.15
'Algorithm/Memo' 카테고리의 다른 글
  • 재귀함수로 만드는 합
  • 다익스트라 알고리즘
  • 너비 우선 탐색 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
  • 최근 글

  • 최근 댓글

  • 태그

    오블완
    spring
    백준
    프로그래머스
    Java
    dfs
    SpringSecurity
    JWT
    티스토리챌린지
    c++ 기초 플러스
    JPA
    dp
    위클리 챌린지
    알고리즘
  • hELLO· Designed By정상우.v4.10.0
chanheess
깊이 우선 탐색_DFS

개인정보

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

티스토리툴바

단축키

내 블로그

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

블로그 게시글

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

모든 영역

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

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