์ผ | ์ | ํ | ์ | ๋ชฉ | ๊ธ | ํ |
---|---|---|---|---|---|---|
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 | 31 |
- ๋ณํฉ์ ๋ ฌ
- ๊ทธ๋ฆฌ๋
- ๊ทธ๋ํ
- ๊ทธ๋ํํ์
- ๋ฐ์ดํฐ๋ฒ ์ด์ค
- ๋์ ํฉ
- ๊ตฌํ
- ์๊ณ ๋ฆฌ์ฆ
- ๋ฐฑ์ค
- ํ๋ก๊ทธ๋๋จธ์ค
- ๋จธ์ง์ํธ
- ๋๋น์ฐ์ ํ์
- db
- BFS
- LIS
- ๊น์ด์ฐ์ ํ์
- ์์๊ตฌํ๊ธฐ
- ์์ํ์
- ์ํ
- SQL
- ํ์ด์ฌ
- DP
- ํฐ์คํ ๋ฆฌ์ฑ๋ฆฐ์ง
- ์๋ฃ๊ตฌ์กฐ
- ์ฐ์ ์์ํ
- ์ค๋ธ์
- ๋ค์ด๋๋ฏนํ๋ก๊ทธ๋๋ฐ
- ์ ๋ ฌ
- DFS
- ๋์ ๊ณํ๋ฒ
๐๐ญ๐ฐ๐ธ ๐ฃ๐ถ๐ต ๐ด๐ต๐ฆ๐ข๐ฅ๐บ
[์๊ณ ๋ฆฌ์ฆ] ๊ทธ๋ํ ์ํ ๋ฌธ์ - 2. ๋๋น ์ฐ์ ํ์(BFS) ๋ณธ๋ฌธ
[์๊ณ ๋ฆฌ์ฆ] ๊ทธ๋ํ ์ํ ๋ฌธ์ - 2. ๋๋น ์ฐ์ ํ์(BFS)
.23 2021. 7. 22. 00:45'์ฝ๋ฉ ํ ์คํธ๋ฅผ ์ํ ์๋ฃ ๊ตฌ์กฐ์ ์๊ณ ๋ฆฌ์ฆ with C++' ๋ฅผ ์ฐธ๊ณ ํ์ฌ ์์ฑํ์์ต๋๋ค.
๊น์ด ์ฐ์ ํ์(DFS) ๋ณด๋ฌ๊ฐ๊ธฐ
2.2.3 ๋๋น ์ฐ์ ํ์ ; Breadth-First Search
๋๋น ์ฐ์ ํ์(BFS)์ ์์ ์ ์ ๊ณผ ๊ฐ๊น์ด ์ ์ ๋ถํฐ ๋ฐ๋ณต์ ์ผ๋ก ํ์ํด๋๊ฐ๋ ๋ฐฉ์์ ์๋ฏธํ๋ค.
๋ค์๊ณผ ๊ฐ์ ๋ชจ์์ ๊ทธ๋ํ๊ฐ ์๋ค๊ณ ๊ฐ์ ํ๋ค. 0๋ฒ์งธ ์ ์ ์ ์์์ผ๋ก ์์ ๊ฐ๋ถํฐ ์ฐพ์๊ฐ๋ค๊ณ ๊ฐ์ ํ์ ๋, BFS ์๊ณ ๋ฆฌ์ฆ์ ์ ์ฉํ๋ฉด ๋ค์๊ณผ ๊ฐ์ ์์๋ก ์งํ๋๋ค.
1๋จ๊ณ : 0๋ฒ ์ ์ ๋ฐฉ๋ฌธ
2๋จ๊ณ : 0๋ฒ ์ ์ ๊ณผ ์ธ์ ํ ์ ์ ์ค ๊ฐ์ฅ ๊ฐ์ด ์์ 1๋ฒ ์ ์ ๋ฐฉ๋ฌธ
3๋จ๊ณ : 0๋ฒ ์ ์ ๊ณผ ์ธ์ ํ ์ ์ ์ค ๋ฐฉ๋ฌธํ์ง ์์๊ณ , ๊ฐ์ฅ ๊ฐ์ด ์์ 2๋ฒ ์ ์ ๋ฐฉ๋ฌธ
4๋จ๊ณ : 0๋ฒ ์ ์ ๊ณผ ์ธ์ ํ ์ ์ ์ค ๋ฐฉ๋ฌธํ์ง ์์ 3๋ฒ ์ ์ ๋ฐฉ๋ฌธ
5๋จ๊ณ : 0๋ฒ ์ ์ ๊ณผ ์ธ์ ํ ์ ์ ๋ค์ ๋ชจ๋ ๋ฐฉ๋ฌธํ์์ผ๋ฏ๋ก ๋ค์ ์ ์ ์ธ 1๋ฒ ์ ์ ์ ๊ธฐ์ค์ผ๋ก ํจ. 1๋ฒ ์ ์ ๊ณผ ์ธ์ ํ ์ ์ ์ค ๋ฐฉ๋ฌธํ์ง ์์๊ณ , ๊ฐ์ฅ ๊ฐ์ด ์์ 4๋ฒ ์ ์ ๋ฐฉ๋ฌธ
6๋จ๊ณ : 1๋ฒ ์ ์ ๊ณผ ์ธ์ ํ ์ ์ ์ค ๋ฐฉ๋ฌธํ์ง ์์ 5๋ฒ ์ ์ ๋ฐฉ๋ฌธ
7๋จ๊ณ : 1๋ฒ๊ณผ 2๋ฒ ์ ์ ์ ์ธ์ ํ ์ ์ ๋ค์ ๋ชจ๋ ๋ฐฉ๋ฌธํ์์ผ๋ฏ๋ก 3๋ฒ ์ ์ ์ผ๋ก๋ถํฐ ์ธ์ ํ ์ ์ ๋ค์ ์ฐพ์. 3๋ฒ ์ ์ ๊ณผ ์ธ์ ํ ์ ์ ์ค ๋ฐฉ๋ฌธํ์ง ์์ 6๋ฒ ์ ์ ๋ฐฉ๋ฌธ. ๋์ด์ ๋ฐฉ๋ฌธํ ์ ์๋ ์ ์ ์ด ์กด์ฌํ์ง ์์ผ๋ฏ๋ก BFS ์ข ๋ฃ.
๋ฐ๋ผ์ ์์ ๊ทธ๋ํ๋ฅผ DFS๋ฅผ ํตํด ์ํํ์์ ๋ 0 โก๏ธ 1 โก๏ธ 2 โก๏ธ 3 โก๏ธ 4 โก๏ธ 5 โก๏ธ 6 ์์๋ก ๋ฐฉ๋ฌธํ๋ค.
2.2.4 ๋๋น ์ฐ์ ํ์ ์ฝ๋
๋๋น ์ฐ์ ํ์์ ๊ตฌํํ๋ ๋ฐ๋ DFS์ ๋ฌ๋ฆฌ ํ๋ฅผ ์ฌ์ฉํ๋ค. ํ๋ฅผ ์ด์ฉํ์ฌ ์์ ์ ์ ์ ๊ฐ๊น์ด ์ ์ ์ ๋ฉ๋ฆฌ ์๋ ์ ์ ๋ณด๋ค ๋จผ์ ๋ฐฉ๋ฌธํ ์ ์๋๋ก ํ๋ค. ์ ์ ๊ณผ ๊ฐ์ ์ ๋ณด๊ฐ ๋ด๊ธด 1์ฐจ์ ์ ์ ๋ฐฐ์ด ๋ฒกํฐ graph์ ๋ฐฉ๋ฌธ ์ฌ๋ถ๋ฅผ ํ์ํ๋ bool ๋ฒกํฐ visited๋ฅผ ์ด์ฉํ์ฌ, ๋ฐฉ๋ฌธํ ์ ์ ์ ์ ํํ ๋ค BFS๋ฅผ ์คํํ๋ค. ํ์ธ q์ ์์ ์ ์ ์ ๋ณด๋ฅผ ๋ฃ์ ํ q๊ฐ ๋น ํ๊ฐ ๋ ๋ ๊น์ง ๋ฐ๋ณต์ ์ผ๋ก ํ์์ ํด ๋๊ฐ๋ค. ์๊ฐ ๋ณต์ก๋๋ O(V + E) (V : ์ ์ ์ ๊ฐ์, E : ๊ฐ์ ์ ๊ฐ์)๋ก DFS์ ๋์ผํ๋ค.
์์ ์ ์ ๊ณผ ๊ฐ๊น์ด ์ ์ ์ ์ฐพ๋ ๋ฐ ์ ๋ฆฌํ๊ณ , ์์ ์ ์ ์์ ํด๋น ์ ์ ๊น์ง์ ์ต๋จ ๊ฑฐ๋ฆฌ ๊ฒฝ๋ก๊ฐ ๋ณด์ฅ๋๋ค.
void BFS(int start) {
queue<int> q;
q.push(start);
visited[start] = true;
while(!q.empty()) {
int vertex = q.front();
q.pop();
printf("%d ", vertex);
for(int i = 0; i < graph[vertex].size(); i++) {
int next = graph[vertex][i];
if(!visited[next]) {
q.push(next);
visited[next] = true;
}
}
}
}
์์ ํจ์๋ฅผ ์ด์ฉํ ์ ์ฒด ์ฝ๋๋ ๋ค์๊ณผ ๊ฐ๋ค. ์ ์ ๊ณผ ๊ฐ์ ์ ๋ ฅ ๋ฐฉ์์ ๋ฐฑ์ค 1260๋ฒ DFS์ BFS๋ฅผ ์ด์ฉํ์๋ค.
#include <cstdio>
#include <vector>
#include <queue>
#define MAX 1001
using namespace std;
vector<int> graph[MAX];
vector<bool> visited(MAX, false);
void BFS(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);
}
BFS(start);
return 0;
}
void BFS(int start) {
queue<int> q;
q.push(start);
visited[start] = true;
while(!q.empty()) {
int vertex = q.front();
q.pop();
printf("%d ", vertex);
for(int i = 0; i < graph[vertex].size(); i++) {
int next = graph[vertex][i];
if(!visited[next]) {
q.push(next);
visited[next] = true;
}
}
}
}
'์๊ณ ๋ฆฌ์ฆ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[์๊ณ ๋ฆฌ์ฆ] ๋์ ํฉ(prefix sum) (0) | 2024.11.09 |
---|---|
[์๊ณ ๋ฆฌ์ฆ] ์ด๋ถ ํ์(Binary Search) (0) | 2021.08.08 |
[์๊ณ ๋ฆฌ์ฆ] ๊ทธ๋ํ ์ํ ๋ฌธ์ - 1. ๊น์ด ์ฐ์ ํ์(DFS) (0) | 2021.07.21 |
[์๊ณ ๋ฆฌ์ฆ] ์ ๋ ฌ - 2. ํต ์ ๋ ฌ(Quick Sort) (0) | 2021.07.15 |
[์๊ณ ๋ฆฌ์ฆ] ์ ๋ ฌ - 1. ๋ณํฉ ์ ๋ ฌ(Merge Sort) (0) | 2021.07.14 |