๐Ÿฆ [์•Œ๊ณ ๋ฆฌ์ฆ˜] BFS (๋„ˆ๋น„ ์šฐ์„  ํƒ์ƒ‰)

๋‹ฅ๊ฐœยท2024๋…„ 6์›” 15์ผ

๊ณต๋ถ€

๋ชฉ๋ก ๋ณด๊ธฐ
3/23

์œ ํŠœ๋ธŒ ์‹œ์ฒญ

๊ทธ๋ž˜ํ”„ ํƒ์ƒ‰

๊ทธ๋ž˜ํ”„ ํƒ์ƒ‰ : ์—ฐ์†ํ•ด์„œ ์ด์–ด์งˆ ๋•Œ ๋ชจ๋‘ ํ™•์ธํ•˜๋Š” ๋ฐฉ๋ฒ•
Graph : Vertex + Edge
์ข…๋ฅ˜: BFS : Breadth-first search ๋„ˆ๋น„์šฐ์„ ํƒ์ƒ‰
์ž์‹์„ ์šฐ์„ ์œผ๋กœ ํƒ์ƒ‰
DFS : Depth ๊นŠ์ด ์šฐ์„  ํƒ์ƒ‰
์ž์‹์˜ ์ž์‹์„ ์šฐ์„ ์œผ๋กœ ํƒ์ƒ‰

  • BFS : 1 -2 -5 -3 -4 -6
    1 - a - b - 2 - 5 - d - f - ...
  • DFS : 1 -2 -3 -4 -6 -5

๊ตฌํ˜„

์•„์ด๋””์–ด

1) ์‹œ์ž‘์ ์— ์—ฐ๊ฒฐ๋œ Vertex ์ฐพ๊ธฐ
2) Queue์— ์ €์žฅ
3) Queue ์˜ ๊ฐ€์žฅ ๋จผ์ € ๊ฒƒ ๋ฝ‘์•„ ๋ฐ˜๋ณต

Queue ๋ž€?

FIFO
โ†”๏ธŽ Stack (DFS์™€ ์ง๊ฟ)

์‹œ๊ฐ„๋ณต์žก๋„: O(V+E)

๋ชจ๋“  ๊ฐ„์„ ์— ๋Œ€ํ•ด ํ•œ๋ฒˆ์”ฉ ๊ฒ€์‚ฌ, ๊ฐ ์ •์ ์„ ํ•œ๋ฒˆ์”ฉ ๋ฐฉ๋ฌธ

์ž๋ฃŒ๊ตฌ์กฐ

๊ทธ๋ž˜ํ”„
๋ฐฉ๋ฌธ์—ฌ๋ถ€ ํ™•์ธ ( ์žฌ๋ฐฉ๋ฌธ ๊ธˆ์ง€ (์ค‘๋ณต์—ฐ์‚ฐ ๊ธˆ์ง€XXX))
Queue : BFS ํ’€์ด

๋ฐฑ์ค€1926 ๋ฌธ์ œ๋กœ ํ’€์ด

Q. ์–ด๋–ค ํฐ ๋„ํ™”์ง€์— ๊ทธ๋ฆผ์ด ๊ทธ๋ ค์ ธ ์žˆ์„ ๋•Œ, ๊ทธ ๊ทธ๋ฆผ์˜ ๊ฐœ์ˆ˜์™€, ๊ทธ ๊ทธ๋ฆผ ์ค‘ ๋„“์ด๊ฐ€ ๊ฐ€์žฅ ๋„“์€ ๊ฒƒ์˜ ๋„“์ด๋ฅผ ์ถœ๋ ฅํ•˜์—ฌ๋ผ. ๋‹จ, ๊ทธ๋ฆผ์ด๋ผ๋Š” ๊ฒƒ์€ 1๋กœ ์—ฐ๊ฒฐ๋œ ๊ฒƒ์„ ํ•œ ๊ทธ๋ฆผ์ด๋ผ๊ณ  ์ •์˜ํ•˜์ž. ๊ฐ€๋กœ๋‚˜ ์„ธ๋กœ๋กœ ์—ฐ๊ฒฐ๋œ ๊ฒƒ์€ ์—ฐ๊ฒฐ์ด ๋œ ๊ฒƒ์ด๊ณ  ๋Œ€๊ฐ์„ ์œผ๋กœ ์—ฐ๊ฒฐ์ด ๋œ ๊ฒƒ์€ ๋–จ์–ด์ง„ ๊ทธ๋ฆผ์ด๋‹ค. ๊ทธ๋ฆผ์˜ ๋„“์ด๋ž€ ๊ทธ๋ฆผ์— ํฌํ•จ๋œ 1์˜ ๊ฐœ์ˆ˜์ด๋‹ค.

Input.
์ฒซ์งธ ์ค„์— ๋„ํ™”์ง€์˜ ์„ธ๋กœ ํฌ๊ธฐ n(1 โ‰ค n โ‰ค 500)๊ณผ ๊ฐ€๋กœ ํฌ๊ธฐ m(1 โ‰ค m โ‰ค 500)์ด ์ฐจ๋ก€๋กœ ์ฃผ์–ด์ง„๋‹ค. ๋‘ ๋ฒˆ์งธ ์ค„๋ถ€ํ„ฐ n+1 ์ค„ ๊นŒ์ง€ ๊ทธ๋ฆผ์˜ ์ •๋ณด๊ฐ€ ์ฃผ์–ด์ง„๋‹ค. (๋‹จ ๊ทธ๋ฆผ์˜ ์ •๋ณด๋Š” 0๊ณผ 1์ด ๊ณต๋ฐฑ์„ ๋‘๊ณ  ์ฃผ์–ด์ง€๋ฉฐ, 0์€ ์ƒ‰์น ์ด ์•ˆ๋œ ๋ถ€๋ถ„, 1์€ ์ƒ‰์น ์ด ๋œ ๋ถ€๋ถ„์„ ์˜๋ฏธํ•œ๋‹ค)

6 5
1 1 0 1 1
0 1 1 0 0
0 0 0 0 0
1 0 1 1 1
0 0 1 1 1
0 0 1 1 1

Output.
์ฒซ์งธ ์ค„์—๋Š” ๊ทธ๋ฆผ์˜ ๊ฐœ์ˆ˜, ๋‘˜์งธ ์ค„์—๋Š” ๊ทธ ์ค‘ ๊ฐ€์žฅ ๋„“์€ ๊ทธ๋ฆผ์˜ ๋„“์ด๋ฅผ ์ถœ๋ ฅํ•˜์—ฌ๋ผ. ๋‹จ, ๊ทธ๋ฆผ์ด ํ•˜๋‚˜๋„ ์—†๋Š” ๊ฒฝ์šฐ์—๋Š” ๊ฐ€์žฅ ๋„“์€ ๊ทธ๋ฆผ์˜ ๋„“์ด๋Š” 0์ด๋‹ค.

4
9

  • 1๋ฒˆ๋“ค์„ ์ฐพ์•„๋‚˜๊ฐ€๊ธฐ
  • 2์ค‘ for์„ ๋Œ๋ฉฐ 1์ด ๋‚˜์˜ฌ ๋•Œ๋งˆ๋‹ค BFS , BUT! ๋ฐฉ๋ฌธํ•œ ๊ณณ์€ ๋ฐฉ๋ฌธํ•˜๋ฉด ์•ˆ๋จ
    ์กฐ๊ฑด: 1 && ๋ฐฉ๋ฌธํ•˜์ง€ ์•Š์€ ๊ณณ
    ๋Œ๋ฉด์„œ ๊ทธ๋ฆผ ๊ฐœ์ˆ˜ + 1, ์ตœ๋Œ€๊ฐ’ ๊ฐฑ์‹ 
  • ์‹œ๊ฐ„๋ณต์žก๋„
    BFS : O(V+E) = O(5V) = O(2500)
    V= MN = 500500(์กฐ๊ฑด:์ตœ๋Œ€500) = 250,000
    E= V4 (๋„‰๋„‰ํ•˜๊ฒŒ 4๊ฐœ) = 250,0004 = 1,000,000 1์ดˆ์— 2์–ต๊ฐœ์˜ ์—ฐ์‚ฐ์ด ๊ฐ€๋Šฅํ•˜๋ฏ€๋กœ ๋ฌธ์ œํ’€์ด ๊ฐ€๋Šฅ!
  • ์ž๋ฃŒ๊ตฌ์กฐ
    ๊ทธ๋ž˜ํ”„ ์ „์ฒด ์ง€๋„ : int [][] (2์ฐจ์› ๋ฐฐ์—ด)
    ๋ฐฉ๋ฌธ : bool [][]
    Queue(BFS)

https://www.youtube.com/watch?v=ansd5B27uJM&list=PLi-xJrVzQaxXC2Aausv_6mlOZZ2g2J6YB&index=2
https://www.acmicpc.net/problem/1926 ๋ฐฑ์ค€1926 ๋ฌธ์ œ

profile
๋ฐœ๋ฐ”๋‹ฅ๋ถ€ํ„ฐ ์‹œ์ž‘ํ•˜๋Š” ์ฝ”๋”ฉ๊ณต๋ถ€

0๊ฐœ์˜ ๋Œ“๊ธ€