Skip to content

Commit

Permalink
2020-02-05 [Algorithm] DFS & BFS Add
Browse files Browse the repository at this point in the history
  • Loading branch information
gyusuk committed Feb 5, 2020
1 parent 1a9ce25 commit a86d68b
Showing 1 changed file with 175 additions and 0 deletions.
175 changes: 175 additions & 0 deletions Algorithm/DFS & BFS.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,175 @@
# DFS & BFS

<br>

๊ทธ๋ž˜ํ”„ ์•Œ๊ณ ๋ฆฌ์ฆ˜์œผ๋กœ, ๋ฌธ์ œ๋ฅผ ํ’€ ๋•Œ ์ƒ๋‹นํžˆ ๋งŽ์ด ์‚ฌ์šฉํ•œ๋‹ค.

๊ฒฝ๋กœ๋ฅผ ์ฐพ๋Š” ๋ฌธ์ œ ์‹œ, ์ƒํ™ฉ์— ๋งž๊ฒŒ DFS์™€ BFS๋ฅผ ํ™œ์šฉํ•˜๊ฒŒ ๋œ๋‹ค.

<br>

### DFS

> ๋ฃจํŠธ ๋…ธ๋“œ ํ˜น์€ ์ž„์˜ ๋…ธ๋“œ์—์„œ **๋‹ค์Œ ๋ธŒ๋žœ์น˜๋กœ ๋„˜์–ด๊ฐ€๊ธฐ ์ „์—, ํ•ด๋‹น ๋ธŒ๋žœ์น˜๋ฅผ ๋ชจ๋‘ ํƒ์ƒ‰**ํ•˜๋Š” ๋ฐฉ๋ฒ•
**์Šคํƒ or ์žฌ๊ท€ํ•จ์ˆ˜**๋ฅผ ํ†ตํ•ด ๊ตฌํ˜„ํ•œ๋‹ค.

<br>

- ๋ชจ๋“  ๊ฒฝ๋กœ๋ฅผ ๋ฐฉ๋ฌธํ•ด์•ผ ํ•  ๊ฒฝ์šฐ ์‚ฌ์šฉ์— ์ ํ•ฉ

<img src="https://upload.wikimedia.org/wikipedia/commons/7/7f/Depth-First-Search.gif" width="300">

##### ์‹œ๊ฐ„ ๋ณต์žก๋„

- ์ธ์ ‘ ํ–‰๋ ฌ : O(V^2)
- ์ธ์ ‘ ๋ฆฌ์ŠคํŠธ : O(V+E)

> V๋Š” ์ ‘์ , E๋Š” ๊ฐ„์„ ์„ ๋œปํ•œ๋‹ค
<br>

##### Code

```c
#include <stdio.h>

int map[1001][1001], dfs[1001];

void init(int *, int size);

void DFS(int v, int N) {

dfs[v] = 1;
printf("%d ", v);

for (int i = 1; i <= N; i++) {
if (map[v][i] == 1 && dfs[i] == 0) {
DFS(i, N);
}
}

}

int main(void) {

init(map, sizeof(map) / 4);
init(dfs, sizeof(dfs) / 4);

int N, M, V;
scanf("%d%d%d", &N, &M, &V);

for (int i = 0; i < M; i++)
{
int start, end;
scanf("%d%d", &start, &end);
map[start][end] = 1;
map[end][start] = 1;
}

DFS(V, N);

return 0;
}

void init(int *arr, int size) {
for (int i = 0; i < size; i++)
{
arr[i] = 0;
}
}
```
<br>
<br>
### BFS
> ๋ฃจํŠธ ๋…ธ๋“œ ๋˜๋Š” ์ž„์˜ ๋…ธ๋“œ์—์„œ **์ธ์ ‘ํ•œ ๋…ธ๋“œ๋ถ€ํ„ฐ ๋จผ์ € ํƒ์ƒ‰**ํ•˜๋Š” ๋ฐฉ๋ฒ•
**ํ**๋ฅผ ํ†ตํ•ด ๊ตฌํ˜„ํ•œ๋‹ค. (ํ•ด๋‹น ๋…ธ๋“œ์˜ ์ฃผ๋ณ€๋ถ€ํ„ฐ ํƒ์ƒ‰ํ•ด์•ผํ•˜๊ธฐ ๋•Œ๋ฌธ)
<br>
- ์ตœ์†Œ ๋น„์šฉ(์ฆ‰, ๋ชจ๋“  ๊ณณ์„ ํƒ์ƒ‰ํ•˜๋Š” ๊ฒƒ๋ณด๋‹ค ์ตœ์†Œ ๋น„์šฉ์ด ์šฐ์„ ์ผ ๋•Œ)์— ์ ํ•ฉ
<img src="https://upload.wikimedia.org/wikipedia/commons/5/5d/Breadth-First-Search-Algorithm.gif" width="300">
##### ์‹œ๊ฐ„ ๋ณต์žก๋„
- ์ธ์ ‘ ํ–‰๋ ฌ : O(V^2)
- ์ธ์ ‘ ๋ฆฌ์ŠคํŠธ : O(V+E)
##### Code
```c
#include <stdio.h>
int map[1001][1001], bfs[1001];
int queue[1001];
void init(int *, int size);
void BFS(int v, int N) {
int front = 0, rear = 0;
int pop;
printf("%d ", v);
queue[rear++] = v;
bfs[v] = 1;
while (front < rear) {
pop = queue[front++];
for (int i = 1; i <= N; i++) {
if (map[pop][i] == 1 && bfs[i] == 0) {
printf("%d ", i);
queue[rear++] = i;
bfs[i] = 1;
}
}
}
return;
}
int main(void) {
init(map, sizeof(map) / 4);
init(bfs, sizeof(bfs) / 4);
init(queue, sizeof(queue) / 4);
int N, M, V;
scanf("%d%d%d", &N, &M, &V);
for (int i = 0; i < M; i++)
{
int start, end;
scanf("%d%d", &start, &end);
map[start][end] = 1;
map[end][start] = 1;
}
BFS(V, N);
return 0;
}
void init(int *arr, int size) {
for (int i = 0; i < size; i++)
{
arr[i] = 0;
}
}
```

<br>

**์—ฐ์Šต๋ฌธ์ œ** : [[BOJ] DFS์™€ BFS](https://www.acmicpc.net/problem/1260)

<br>

##### [์ฐธ๊ณ  ์ž๋ฃŒ]

- [๋งํฌ](https://developer-mac.tistory.com/64)

0 comments on commit a86d68b

Please sign in to comment.