BFS(Breath-Find-Search)
๋๋น ์ฐ์ ํ์
๊ทธ๋ํ์ ํ์ ๋ฐฉ๋ฒ ์ค ํ๋์ BFS์ ๋ํด์ ์ดํด๋ณด๋ ค๊ณ ํ๋ค.
BFS๋ ๋ง ๊ทธ๋๋ก ๋๋น ์ฐ์ ํ์, ์ฆ ํน์ Vertice์์ ๊ฐ์ฅ ๊ฐ๊น์ด Vertice๋ถํฐ ํ์ํ๋ค๋ ๋ป์ด๋ค.
์ฐ์ BFS๋ฅผ ์ฌ์ฉํ๊ธฐ ์ํด์๋ Queue๊ฐ ํ์ํ๋ค.
Stack, Queue, Heap์ ๋ํด์๋ ๋์ค์ ์์ธํ ์ค๋ช ํ๊ธฐ๋ก ํ๊ณ
Queue์ ๋ํด ๊ฐ๋จํ๊ฒ ์ค๋ช ํ์๋ฉด FIFO(First in First out - ์ ์ ์ ์ถ)์ผ๋ก ๋์ํ๋ ์๋ฃ๊ตฌ์กฐ์ด๋ค.
์์์๋ ๋งํ๋ฏ์ด BFS์ ๊ฐ์ฅ ํฐ ๊ฐ๋ ์ ๊ฐ๊น์ด ์ ์ ์ ๋ฐฉ๋ฌธํ๋, ์์ง ๋ฐฉ๋ฌธํ์ง ์์ ์ ์ ์ธ ๊ฒฝ์ฐ ๋ฐฉ๋ฌธ ๋ฆฌ์คํธ์ ์ ์ ์ ์ ์ฅํ๋ฉด ๋๋ค. ์ด ๋ฐฉ๋ฌธ ๋ฆฌ์คํธ๊ฐ ์ฐ๋ฆฌ๊ฐ ์ํ๋ ์ต์ข ์ ์ธ BFS์ ํ์ ์์์ด๋ค. ์๊ณ ๋ฆฌ์ฆ ๋์ ๋ฐฉ์์ ๋ค์๊ณผ ๊ฐ๋ค.
1. Queue์์ ํน์ ์ ์ ์ ๋บ๋ค.
2. ํน์ ์ ์ ์ด ์์ง ๋ฐฉ๋ฌธํ์ง ์์ ์ ์ ์ธ ๊ฒฝ์ฐ ์ด๋ฅผ ๋ฐฉ๋ฌธ์ฒ๋ฆฌ ํด์ค๋ค.
3. ์ด ์ ์ ๊ณผ ์ฐ๊ฒฐ๋ ๋ค๋ฅธ ์ ์ ์ Queue์ ๋ฃ๋๋ค.
๋ค์๊ณผ ๊ฐ์ ๊ทธ๋ํ๊ฐ ์ฃผ์ด์ก์ ๋ BFS๋ฅผ ์ ์ฉํด๋ณด์.
โ ์์ ์ ์ ์ 8์ด๋ผ๊ณ ๊ฐ์ ํ์. Queue์๋ ์์ ์ ์ ์ด ๋ค์ด์๋ค.
Queue | 8 | ||||||||
Visit |
โก Queue์์ 8์ ๋นผ์ฃผ๊ณ ์์ง ๋ฐฉ๋ฌธํ์ง ์์ ์ ์ ์ด๋ฏ๋ก, ์ด๋ฅผ ๋ฐฉ๋ฌธ์ฒ๋ฆฌ ํด์ค๋ค.
์ดํ 8๊ณผ ์ฐ๊ฒฐ๋ 1๊ณผ 2๋ฅผ Queue์ ๋ฃ์ด์ค๋ค.
Queue | 1 | 2 | |||||||
Visit | 8 |
โข Queue์์ 1์ ๋นผ์ฃผ๊ณ ์์ง ๋ฐฉ๋ฌธํ์ง ์์ ์ ์ ์ด๋ฏ๋ก, ์ด๋ฅผ ๋ฐฉ๋ฌธ์ฒ๋ฆฌ ํด์ค๋ค.
์ดํ 1๊ณผ ์ฐ๊ฒฐ๋ 5์ 3์ Queue์ ๋ฃ์ด์ค๋ค. (Queue์ ๋ฃ์ด์ค ๋ ์ค๋ฆ์ฐจ์์ผ๋ก ์ ๋ ฌํ๋ค๊ณ ๊ฐ์ )
Queue | 2 | 3 | 5 | ||||||
Visit | 8 | 1 |
โฃ Queue์์ 2๋ฅผ ๋นผ์ฃผ๊ณ ์์ง ๋ฐฉ๋ฌธํ์ง ์์ ์ ์ ์ด๋ฏ๋ก, ์ด๋ฅผ ๋ฐฉ๋ฌธ์ฒ๋ฆฌ ํด์ค๋ค.
์ดํ 2์ ์ฐ๊ฒฐ๋ 6์ Queue์ ๋ฃ์ด์ค๋ค.
Queue | 3 | 5 | 6 | ||||||
Visit | 8 | 1 | 2 |
โค Queue์์ 3๋ฅผ ๋นผ์ฃผ๊ณ ์์ง ๋ฐฉ๋ฌธํ์ง ์์ ์ ์ ์ด๋ฏ๋ก, ์ด๋ฅผ ๋ฐฉ๋ฌธ์ฒ๋ฆฌ ํด์ค๋ค.
3๊ณผ ์ฐ๊ฒฐ๋ ๋ค๋ฅธ ์ ์ ์ด ์์ผ๋ฏ๋ก ๋์ด๊ฐ๋ค.
Queue | 5 | 6 | |||||||
Visit | 8 | 1 | 2 | 3 |
โฅ Queue์์ 5๋ฅผ ๋นผ์ฃผ๊ณ ์์ง ๋ฐฉ๋ฌธํ์ง ์์ ์ ์ ์ด๋ฏ๋ก, ์ด๋ฅผ ๋ฐฉ๋ฌธ์ฒ๋ฆฌ ํด์ค๋ค.
์ดํ 5์ ์ฐ๊ฒฐ๋ 7๊ณผ 9๋ฅผ Queue์ ๋ฃ์ด์ค๋ค.
Queue | 6 | 7 | 9 | ||||||
Visit | 8 | 1 | 2 | 3 | 5 |
โฆ Queue์์ 6์ ๋นผ์ฃผ๊ณ ์์ง ๋ฐฉ๋ฌธํ์ง ์์ ์ ์ ์ด๋ฏ๋ก, ์ด๋ฅผ ๋ฐฉ๋ฌธ์ฒ๋ฆฌ ํด์ค๋ค.
์ดํ 6๊ณผ ์ฐ๊ฒฐ๋ 4๋ฅผ Queue์ ๋ฃ์ด์ค๋ค.
Queue | 7 | 9 | 4 | ||||||
Visit | 8 | 1 | 2 | 3 | 5 | 6 |
โง ์ ๊ณผ์ ์ Queue์ ์์๊ฐ ์์ ๋๊น์ง ๋ฐ๋ณตํ๋ค. ๊ณผ์ ์ด ์ข ๋ฃ๋๋ฉด Visit์ ์ ์ฅ๋ ์ ์ ์ ์์๊ฐ BFS์ด๋ค.
Queue | |||||||||
Visit | 8 | 1 | 2 | 3 | 5 | 6 | 7 | 9 | 4 |
BFS๋ ์ต๋จ๊ฑฐ๋ฆฌ๋ฅผ ํ์ํ๋ ๊ฒฝ์ฐ์ ์ฌ์ฉ๋๋ค. ๋ฏธ๋ก์ฐพ๊ธฐ์์ ์ฌ์ฉ๋ ์ ์๋ค.
์์ ๊ฐ๋ ์ ํ์ด์ฌ์ผ๋ก ๊ตฌํํด๋ณด์๋ค.
์์์ ์ธ๊ธํ ๊ทธ๋ํ๋ก ์ ๋ ฅ ๊ฐ์ ์ฃผ๋ฉด ์ด๋ก ์์ผ๋ก ๊ตฌํ ๋ต๊ณผ ๋์ผํ ๊ฒ์ ๋ณผ ์ ์๋ค.
[Input]
9 8 8 # ์ ์ ์ ๊ฐ์, ๊ฐ์ ์ ๊ฐ์, ์์ ์ ์
8 1
8 2
1 5
1 3
5 7
5 9
2 6
6 4
[Output]
์ถฉ๋จ๋ํ๊ต ์ปดํจํฐ๊ณตํ๊ณผ ์ด์์ ๊ต์๋์ ์๊ณ ๋ฆฌ์ฆ ์์ ๊ณผ ๋๋น๋์ ์ ํ๋ธ ๊ฐ์ข(youtu.be/66ZKz-FktXo)๋ฅผ ์ฐธ๊ณ ํ์ต๋๋ค.
'โ๏ธ ์๊ณ ๋ฆฌ์ฆ > Graph' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
6. Union Find(ํฉ์งํฉ ์ฐพ๊ธฐ) : MST - 1 (0) | 2021.05.30 |
---|---|
5. Floyd Warshall(ํ๋ฃจ์ด๋ ์์ฌ) : ์ต๋จ ๊ฒฝ๋ก ํ์ - 3 (0) | 2021.03.31 |
4. Bellman-Ford(๋ฒจ๋ง ํฌ๋) : ์ต๋จ ๊ฒฝ๋ก ํ์ - 2 (0) | 2021.03.07 |
3. Dijsktra(๋ค์ต์คํธ๋ผ) : ์ต๋จ ๊ฒฝ๋ก ํ์ - 1 (0) | 2021.03.02 |
2. DFS(Depth-Find-Search) : ๊น์ด ์ฐ์ ํ์ (0) | 2021.01.22 |