μΌ | μ | ν | μ | λͺ© | κΈ | ν |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 |
- λ³ν©μ λ ¬
- DP
- SQL
- λμ κ³νλ²
- 그리λ
- κΉμ΄μ°μ νμ
- νμ΄μ¬
- LIS
- μμνμ
- BFS
- db
- νλ‘κ·Έλλ¨Έμ€
- λλΉμ°μ νμ
- skala
- DFS
- μ€λΈμ
- SK
- skala1κΈ°
- μκ³ λ¦¬μ¦
- λμ ν©
- ꡬν
- λ°μ΄ν°λ² μ΄μ€
- λ€μ΄λλ―Ήνλ‘κ·Έλλ°
- μν
- λ¨Έμ§μνΈ
- μ λ ¬
- κ·Έλν
- λ°±μ€
- ν°μ€ν 리μ±λ¦°μ§
- κ·Έλννμ
- Today
- Total
πππ°πΈ π£πΆπ΅ π΄π΅π¦π’π₯πΊ
[μκ³ λ¦¬μ¦] κ·Έλν μν λ¬Έμ - 1. κΉμ΄ μ°μ νμ(DFS) λ³Έλ¬Έ
[μκ³ λ¦¬μ¦] κ·Έλν μν λ¬Έμ - 1. κΉμ΄ μ°μ νμ(DFS)
.23 2021. 7. 21. 02:37'μ½λ© ν μ€νΈλ₯Ό μν μλ£ κ΅¬μ‘°μ μκ³ λ¦¬μ¦ with C++' λ₯Ό μ°Έκ³ νμ¬ μμ±νμμ΅λλ€.
1. κ·Έλν ; Graph
1.1 κ°λ
κ·Έλν μν λ¬Έμ λ₯Ό λ€μ΄κ°κΈ° μ μ§§κ² κ·Έλνμ λν΄ μ€λͺ νμλ©΄, κ·Έλνλ μ μ (vertex)μ μ§ν©κ³Ό μ μ λ€μ μλ‘ μλ κ°μ (edge)μ μ§ν©μΌλ‘ ꡬμ±λ μλ£κ΅¬μ‘°λ‘ μ°κ²°λμ΄ μλ κ°μ²΄ κ°μ κ΄κ³λ₯Ό ννν μ μλ€. μνμ μΌλ‘λ G = <V, E>(vλ μ μ , eλ κ°μ μ μ§ν©) ννλ‘ ννν μ μλ€. κ°μ λ°©ν₯μ μ 무μ λ°λΌ λ°©ν₯ κ·Έλν(directed graph)μ 무방ν₯ κ·Έλν(undirected graph)λ‘ λλ μ μκ³ , κ°μ μ κ°μ€μΉ μ 무μ λ°λΌ κ°μ€ κ·Έλν(weighted graph)μ λΉκ°μ€ κ·Έλν(unweighted graph)λ‘ λλλ€.
2. κ·Έλν μν λ¬Έμ ; Graph Traversal Problem
2.1 κ°λ
κ·Έλν μν λ¬Έμ λ κ·Έλνμ ν μ μ μμ μμνμ¬ λ¨μ λͺ¨λ μ μ μ λ°©λ¬Ένλ λ¬Έμ λ₯Ό μλ―Ένλ€. λν νΉμ ν μ μ μ μ°ΎκΈ° μν΄ μ¬μ©λ μ μκΈ° λλ¬Έμ κ·Έλν νμ λ¬Έμ (graph search problem)λΌκ³ λ νλ€. κ°κ° μ ν΄μ§ μμλ‘ λͺ¨λ μ μ μ λ°©λ¬Ένλ μ¬λ¬ κ·Έλν νμ μκ³ λ¦¬μ¦λ€μ΄ μλλ°, κ·Έ μ€ κ°μ₯ μ μλ €μ§ μκ³ λ¦¬μ¦μλ λ€μ λ κ°κ° μλ€.
1. κΉμ΄ μ°μ νμ(Depth-First Search)
2. λλΉ μ°μ νμ(Breadth-First Search)
2.2 κ·Έλν μν μκ³ λ¦¬μ¦
2.2.1 κΉμ΄ μ°μ νμ ; Depth-First Search
κΉμ΄ μ°μ νμ(DFS)μ μμ μ μ μμλΆν° νΉμ κ²½λ‘λ₯Ό λ°λΌ κ°λ₯ν λ©λ¦¬ μλ μ μ μ μ¬κ·μ μΌλ‘ λ¨Όμ λ°©λ¬Ένλ λ°©μμ μλ―Ένλ€. λ λ°©λ¬Έν μ μ μ΄ μ‘΄μ¬νμ§ μμΌλ©΄ λ€μ λ€λ‘ λμκ° λ€λ₯Έ κ²½λ‘λ₯Ό μ°Ύμκ°λ€.

λ€μκ³Ό κ°μ λͺ¨μμ κ·Έλνκ° μλ€κ³ κ°μ νλ€. 0λ²μ§Έ μ μ μ μμμΌλ‘ μμ κ°λΆν° μ°Ύμκ°λ€κ³ κ°μ νμ λ, DFS μκ³ λ¦¬μ¦μ μ μ©νλ©΄ λ€μκ³Ό κ°μ μμλ‘ μ§νλλ€.

1λ¨κ³ : 0λ² μ μ λ°©λ¬Έ

2λ¨κ³ : 0λ² μ μ κ³Ό μΈμ ν μ μ μ€ κ°μ₯ κ°μ΄ μμ 1λ² μ μ λ°©λ¬Έ

3λ¨κ³ : 1λ² μ μ κ³Ό μΈμ νκ³ , μμ§ λ°©λ¬Ένμ§ μμ μ μ μ€ κ°μ₯ κ°μ΄ μμ 2λ² μ μ λ°©λ¬Έ

4λ¨κ³ : 2λ² μ μ κ³Ό μΈμ νκ³ , μμ§ λ°©λ¬Ένμ§ μμ μ μ μ€ κ°μ₯ κ°μ΄ μμ 3λ² μ μ λ°©λ¬Έ

5λ¨κ³ : 3λ² μ μ κ³Ό μΈμ νκ³ , μμ§ λ°©λ¬Ένμ§ μμ μ μ μ€ κ°μ₯ κ°μ΄ μμ 4λ² μ μ λ°©λ¬Έ

6λ¨κ³ : 4λ² μ μ κ³Ό μΈμ νκ³ , μμ§ λ°©λ¬Ένμ§ μμ μ μ μΈ 6λ² μ μ λ°©λ¬Έ

7λ¨κ³ : 6λ² μ μ κ³Ό μΈμ νκ³ , μμ§ λ°©λ¬Ένμ§ μμ μ μ μΈ 5λ² μ μ λ°©λ¬Έ. μ΄ν λ μ΄μ λ°©λ¬Ένμ§ μμ μ μ μ΄ μ‘΄μ¬νμ§ μμΌλ―λ‘ DFS μ’ λ£.
λ°λΌμ μμ κ·Έλνλ₯Ό DFSλ₯Ό ν΅ν΄ μννμμ λ 0 β‘οΈ 1 β‘οΈ 2 β‘οΈ 3 β‘οΈ 4 β‘οΈ6 β‘οΈ 5 μμλ‘ λ°©λ¬Ένλ€.
2.2.2 κΉμ΄ μ°μ νμ μ½λ
κΉμ΄ μ°μ νμμ ꡬννλ λ° μ€νμ μ¬μ©νκΈ°λ νκ³ μ¬κ· ν¨μλ₯Ό μ¬μ©νκΈ°λ νλλ°, μ¬κ· νΈμΆ λ°©μμ μ ννμλ€. μ μ κ³Ό κ°μ μ λ³΄κ° λ΄κΈ΄ 1μ°¨μ μ μ λ°°μ΄ λ²‘ν° graphμ λ°©λ¬Έ μ¬λΆλ₯Ό νμνλ bool λ²‘ν° visitedλ₯Ό μ΄μ©νμ¬, λ°©λ¬Έν μ μ μ μ νν λ€ DFSλ₯Ό μ€ννλ€. μκ° λ³΅μ‘λλ O(V + E) (V : μ μ μ κ°μ, E : κ°μ μ κ°μ)λ‘ BFSμ λμΌνλ€.
μμμ μΌλ‘λΆν° νΉμ κ²½λ‘λ₯Ό λ°λΌ μ΄λνκΈ° λλ¬Έμ λ©λ¦¬ λ¨μ΄μ Έ μλ μ μ μ μ°Ύμ λ μ ν©νλ€.
void DFS(int vertex) {
visited[vertex] = true;
printf("%d ", vertex); // λ°©λ¬Έ μ μ μΆλ ₯
for(int i = 0; i < graph[vertex].size(); i++) {
int next = graph[vertex][i];
if(!visited[next])
DFS(next);
}
}
μμ ν¨μλ₯Ό μ΄μ©ν μ 체 μ½λλ λ€μκ³Ό κ°λ€. μ μ κ³Ό κ°μ μ λ ₯ λ°©μμ λ°±μ€ 1260λ² DFSμ BFSλ₯Ό μ΄μ©νμλ€.
#include <cstdio>
#include <vector>
#define MAX 1001
using namespace std;
vector<int> graph[MAX];
vector<bool> visited(MAX, false);
void DFS(int vertex);
int main(void) {
int v, e, start;
scanf("%d %d %d", &v, &e, &start);
visited.resize(e + 1);
for(int i = 0; i < e; i++) {
int a, b;
scanf("%d %d", &a, &b);
graph[a].push_back(b);
graph[b].push_back(a);
}
DFS(start);
return 0;
}
void DFS(int vertex) {
visited[vertex] = true;
printf("%d ", vertex);
for(int i = 0; i < graph[vertex].size(); i++) {
int next = graph[vertex][i];
if(!visited[next])
DFS(next);
}
}β
'μκ³ λ¦¬μ¦' μΉ΄ν κ³ λ¦¬μ λ€λ₯Έ κΈ
[μκ³ λ¦¬μ¦] μ΄λΆ νμ(Binary Search) (0) | 2021.08.08 |
---|---|
[μκ³ λ¦¬μ¦] κ·Έλν μν λ¬Έμ - 2. λλΉ μ°μ νμ(BFS) (0) | 2021.07.22 |
[μκ³ λ¦¬μ¦] μ λ ¬ - 2. ν΅ μ λ ¬(Quick Sort) (0) | 2021.07.15 |
[μκ³ λ¦¬μ¦] μ λ ¬ - 1. λ³ν© μ λ ¬(Merge Sort) (0) | 2021.07.14 |
[μκ³ λ¦¬μ¦] λμ κ³νλ²(Dynamic Programming) (0) | 2021.07.09 |