๐Ÿง ๋„ˆ๋น„ ์šฐ์„  ํƒ์ƒ‰ ( Breadth First Search )

๐Ÿค” ๋„ˆ๋น„์šฐ์„ ํƒ์ƒ‰, BFS๋ž€?

๋„ˆ๋น„ ์šฐ์„  ํƒ์ƒ‰, ์ฆ‰ BFS๋Š” ๊ทธ๋ž˜ํ”„์˜ ์™„์ „ํƒ์ƒ‰(Exhaustive Search)๊ธฐ๋ฒ• ์ค‘ ํ•˜๋‚˜
- ๋„ˆ๋น„ ์šฐ์„  ํƒ์ƒ‰์€ ํƒ์ƒ‰ ์‹œ์ž‘ ๋…ธ๋“œ์™€ ๊ฐ€์žฅ ๊ฐ€๊นŒ์šด ๋…ธ๋“œ๋ฅผ ์šฐ์„ ํƒ์ƒ‰ํ•œ๋‹ค.
- ์ด๋•Œ, ๋ชฉํ‘œ๋…ธ๋“œ์— ๋„์ฐฉํ•˜๋Š” ๊ฒฝ๋กœ๊ฐ€ ์—ฌ๋Ÿฌ๊ฐœ๋ผ๋ฉด, ์ตœ๋‹จ๊ฒฝ๋กœ๋ฅผ ๋ณด์žฅํ•œ๋‹ค.

BFS๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์€ ํŠน์ง•์ด ์žˆ๋‹ค.
๊ธฐ๋Šฅ ํŠน์ง• ์‹œ๊ฐ„๋ณต์žก๋„ G(V, E)
๊ทธ๋ž˜ํ”„์˜ ์™„์ „ํƒ์ƒ‰ (Exhaustive Search)  Queue ์ž๋ฃŒ๊ตฌ์กฐ๋ฅผ ์ด์šฉํ•œ FIFO ํƒ์ƒ‰ O(V+E)
BFS๋Š” ์„ ์ž… ์„ ์ถœ ๋ฐฉ์‹์œผ๋กœ ํƒ์ƒ‰ํ•˜๋Š” ๋ฐฉ๋ฒ•์ด๊ธฐ์— ํ๋ฅผ ์ด์šฉํ•ด ๊ตฌํ˜„ํ•œ๋‹ค.

 

๐Ÿค”  BFS๋ฅผ ์‘์šฉํ•ด ํ’€ ์ˆ˜ ์žˆ๋Š” ๋ฌธ์ œ

- ๊ฐ€์ค‘์น˜๊ฐ€ ์žˆ๋Š” ๊ทธ๋ž˜ํ”„์˜ ์ตœ๋‹จ๊ฑฐ๋ฆฌ (๋‹ค์ต์ŠคํŠธ๋ผ ์•Œ๊ณ ๋ฆฌ์ฆ˜๊ณผ ๊ฐ™์ด ์ตœ๋‹จ ๊ฒฝ๋กœ ํƒ์ƒ‰ ์‹œ ๋งŽ์ด ํ™œ์šฉ)

๐Ÿค”  BFS vs DFS
(์–ด๋–ค ์ƒํƒœ์—์„œ์˜ ๋‹ต์„ ๊ตฌํ•˜๊ธฐ ์œ„ํ•ด ์–ด๋–ค ๊ฒฝ๋กœ๋ฅผ ๋”ฐ๋ผ ๋๊นŒ์ง€ ๋“ค์–ด๊ฐ€๋ด์•ผ ํ•˜๋Š” ๊ฒฝ์šฐ์—๋Š” BFS๋กœ๋Š” ์ž˜ ์•ˆ ๋œ๋‹ค.
๋งˆ์ง€๋ง‰๊นŒ์ง€ ์ผ๋‹จ ๋“ค์–ด๊ฐ”๋‹ค๊ฐ€, ๋Œ์•„์˜ค๋Š” ๊ธธ์— ๊ฑฐ์ณ๊ฐ”๋˜ ์ •์ (vertex)๋“ค์— ๋Œ€ํ•œ ๋‹ต์„ ์ˆœ์ฐจ์ ์œผ๋กœ ๊ฐฑ์‹ ํ•ด์ค˜์•ผ ํ•˜๋Š” ๊ฒฝ์šฐ๊ฐ€ ์žˆ๋‹ค.
๊ทธ๋ฆฌ๊ณ  BFS๋กœ ํ’€ ์ˆ˜ ์žˆ๋‹ค๊ณ  ํ•˜๋”๋ผ๋„, DFS๊ฐ€ ํ›จ์”ฌ ์ง๊ด€์ ์ด๊ณ  ๊ตฌํ˜„ํ•˜๊ธฐ ํŽธํ•œ ๊ฒฝ์šฐ๋“ค๋„ ๋ฌด์ˆ˜ํžˆ ์กด์žฌํ•œ๋‹ค.)

 

 

๐Ÿค”  BFS์˜ ํ•ต์‹ฌ ์ด๋ก 

BFS๋Š” ํ•œ ๋ฒˆ ๋ฐฉ๋ฌธํ•œ ๋…ธ๋“œ๋ฅผ ๋‹ค์‹œ ๋ฐฉ๋ฌธํ•˜๋ฉด ์•ˆ๋œ๋‹ค.
๋”ฐ๋ผ์„œ ๋…ธ๋“œ ๋ฐฉ๋ฌธ์—ฌ๋ถ€๋ฅผ ์ฒดํฌํ•  ๋ฆฌ์ŠคํŠธ๊ฐ€ ํ•„์š”ํ•˜๋‹ค.

BFS ํƒ์ƒ‰๋ฐฉ์‹์€ FIFOํŠน์„ฑ์˜ ํ๋ฅผ ์‚ฌ์šฉํ•ด ์„ค๋ช…ํ•˜์ž๋ฉด, ์•„๋ž˜์™€ ๊ฐ™๋‹ค.

1. BFS๋ฅผ ์‹œ์ž‘ํ•  ๋…ธ๋“œ๋ฅผ ์ •ํ•œ ํ›„ ์‚ฌ์šฉํ•  ์ž๋ฃŒ๊ตฌ์กฐ ์ดˆ๊ธฐํ™” 
- BFS๋ฅผ ์œ„ํ•ด ํ•„์š”ํ•œ ์ดˆ๊ธฐ ์ž‘์—… ์•„๋ž˜์™€ ๊ฐ™๋‹ค.
  โ€ฃ ์ธ์ ‘๋ฆฌ์ŠคํŠธ๋กœ ๊ทธ๋ž˜ํ”„๋ฅผ ํ‘œํ˜„
  โ€ฃ ๋ฐฉ๋ฌธ๋ฆฌ์ŠคํŠธ๋ฅผ ์ดˆ๊ธฐํ™”ํ•˜๊ธฐ
  โ€ฃ ์‹œ์ž‘ ๋…ธ๋“œ ์Šคํƒ์— ์‚ฝ์ž…ํ•˜๊ธฐ
- ํ์— ์‹œ์ž‘๋…ธ๋“œ๋ฅผ 1๋กœ ์‚ฝ์ž…ํ•  ๋•Œ, ํ•ด๋‹น ์œ„์น˜์˜ ๋ฐฉ๋ฌธ๋ฆฌ์ŠคํŠธ๋ฅผ ์ฒดํฌํ•˜๋ฉด T, F, F, F, F, F ์ด๋‹ค.


 
2. ํ์—์„œ ๋…ธ๋“œ๋ฅผ ๊บผ๋‚ด ์ธ์ ‘ ๋…ธ๋“œ๋ฅผ ๋‹ค์‹œ ํ์— ์‚ฝ์ž… 
- ํ์—์„œ ๋…ธ๋“œ๋ฅผ ๊บผ๋‚ด๋ฉด์„œ ์ธ์ ‘๋…ธ๋“œ๋ฅผ ํ์— ์‚ฝ์ž…ํ•œ๋‹ค.
- ์ด๋•Œ, ๋ฐฉ๋ฌธ ๋ฆฌ์ŠคํŠธ๋ฅผ ์ฒดํฌํ•˜์—ฌ ์ด๋ฏธ ๋ฐฉ๋ฌธํ•œ ๋…ธ๋“œ๋Š” ํ์— ์‚ฝ์ž…ํ•˜์ง€ ์•Š์œผ๋ฉฐ ๊บผ๋‚ธ ๋…ธ๋“œ๋Š” ํƒ์ƒ‰์ˆœ์„œ์— ๊ธฐ๋กํ•œ๋‹ค.
- ์ด๋•Œ, ๋ฐฉ๋ฌธ๋ฆฌ์ŠคํŠธ๋Š” T, T, T, F, F, F ์ด๊ณ  ํƒ์ƒ‰ ์ˆœ์„œ๋Š” 1์ด๋‹ค.
1์„ ๊บผ๋‚ผ ๋•Œ ํƒ์ƒ‰์ˆœ์„œ์— 1์„ ๊ธฐ๋กํ•˜๊ณ  ์ธ์ ‘๋…ธ๋“œ 3, 2๋ฅผ ํ์— ์‚ฝ์ž…ํ•˜๋ฉฐ ๋ฐฉ๋ฌธ๋ฆฌ์ŠคํŠธ์— ์ฒดํฌํ•œ๋‹ค.

 

3. ํ์— ๊ฐ’์ด ์—†์„ ๋•Œ๊นŒ์ง€ ๋ฐ˜๋ณต 
- ์•ž์„  ๊ณผ์ •์„ ํ ์ž๋ฃŒ๊ตฌ์กฐ์— ๊ฐ’์ด ์—†์„ ๋•Œ๊นŒ์ง€ ๋ฐ˜๋ณตํ•˜๋ฉฐ ์ด๋ฏธ ๊ฑฐ์นœ ๋…ธ๋“œ๋Š” ์žฌ์‚ฝ์ž… ํ•˜์ง€ ์•Š๋Š” ๊ฒƒ์ด ํ•ต์‹ฌ!
- FIFO ๋ฐฉ์‹์œผ๋กœ ํƒ์ƒ‰ํ•˜๊ธฐ์— ํƒ์ƒ‰ ์ˆœ์„œ๊ฐ€ DFS์™€ ๋‹ค๋ฆ„์„ ์œ ์˜ํ•ด์•ผ ํ•œ๋‹ค!
- ์ด๋•Œ, ์ตœ์ข…์ ์ธ ํƒ์ƒ‰์ˆœ์„œ๋Š” 1 - 2 - 3 - 5 - 6 - 4 ์ด๋‹ค.


2, 3 ์ˆœ์„œ๋กœ ๋…ธ๋“œ๋ฅผ ๊บผ๋‚ด๋ฉฐ ์ธ์ ‘ ๋…ธ๋“œ๋ฅผ ํ์— ์‚ฝ์ž…ํ•œ๋‹ค.
2์˜ ๊ฒฝ์šฐ 5, 6์€ ์•„์ง ๋ฐฉ๋ฌธํ•˜์ง€ ์•Š์•˜๊ธฐ์— ๋ฐฉ๋ฌธ๋ฆฌ์ŠคํŠธ๋ฅผ ์ฒดํฌํ•˜๋ฉฐ ๋ชจ๋‘ ์‚ฝ์ž…ํ•œ๋‹ค.
3์˜ ๊ฒฝ์šฐ 4 ์—ญ์‹œ ๋ฐฉ๋ฌธํ•œ ์ ์ด ์—†์–ด์„œ ๋ฐฉ๋ฌธ๋ฆฌ์ŠคํŠธ๋ฅผ ์ฒดํฌํ•˜๋ฉฐ ์‚ฝ์ž…ํ•œ๋‹ค.
์ด๋•Œ, ํƒ์ƒ‰์ˆœ์„œ๋Š” 2, 3์ด ๊ธฐ๋ก๋œ๋‹ค.

5์™€ 6์„ ๊บผ๋‚ผ ๋•Œ, ์ธ์ ‘๋…ธ๋“œ๊ฐ€ ์—†๊ธฐ์— ํƒ์ƒ‰์ˆœ์„œ์— ๊ธฐ๋ก๋งŒ ํ•˜๊ณ  ๊บผ๋‚ธ๋‹ค.
4๋ฅผ ๊บผ๋‚ผ ๋•Œ ์ธ์ ‘๋…ธ๋“œ๋Š” 6์ด์ง€๋งŒ ์ด๋ฏธ ์•ž์„œ ๋ฐฉ๋ฌธํ–ˆ๊ธฐ์— 6์€ ์‚ฝ์ž…ํ•˜์ง€์•Š๊ณ  ๊บผ๋‚ด๊ธฐ๋งŒ ํ•œ๋‹ค.

 

 

 

๐Ÿค” BFS ์ˆ˜๋„์ฝ”๋“œ

BFS์˜  ๊ตฌํ˜„

BFS๋ฅผ ๊ตฌํ˜„ํ•˜๋Š” ๊ฒฝ์šฐ์˜ ์ˆ˜๋„ ์ฝ”๋“œ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค.

BFS(๋„ˆ๋น„ ์šฐ์„  ํƒ์ƒ‰)๋Š” ์‹œ์ž‘ ์ •์ (vertex)์œผ๋กœ๋ถ€ํ„ฐ ๊ฑฐ๋ฆฌ๊ฐ€ ๊ฐ€๊นŒ์šด ์ •์ ๋“ค์„ ๋จผ์ € ์ฐจ๋ก€๋กœ ๋ฐฉ๋ฌธํ•˜๊ณ 
๋ฉ€๋ฆฌ ๋–จ์–ด์ ธ ์žˆ๋Š” ์ •์ ์„ ๋‚˜์ค‘์— ๋ฐฉ๋ฌธํ•˜๋Š” ์šดํ–‰ ๋ฐฉ๋ฒ•์ด๋‹ค. (์ ์ฐจ ์˜์—ญ์„ ๋„“ํ˜€๋‚˜๊ฐ„๋‹ค๊ณ  ์ƒ๊ฐํ•˜๋ฉด ์‰ฝ๋‹ค.)
BFS๋Š” DFS๋ณด๋‹ค ์“ฐ์ž„์ƒˆ๋Š” ์ ์ง€๋งŒ, ๋‹ค์ต์ŠคํŠธ๋ผ ์•Œ๊ณ ๋ฆฌ์ฆ˜๊ณผ ๊ฐ™์ด ์ตœ๋‹จ ๊ฒฝ๋กœ ํƒ์ƒ‰ ์‹œ ๋งŽ์ด ํ™œ์šฉ๋œ๋‹ค.
BFS๋Š” ์žฌ๊ท€๋กœ ๊ตฌํ˜„๋˜์ง€ ์•Š๊ณ  ์˜ค์ง 
ํ๋ฅผ ์ด์šฉํ•œ ๋ฐ˜๋ณต ๊ตฌ์กฐ๋ฅผ ํ†ตํ•ด ๊ตฌํ˜„๋œ๋‹ค๋Š” ์ ์„ ๋ช…์‹ฌํ•˜์ž. 

<pseudocode>

BFS(G, start_v)
    let Q be a queue
    mark start_v as visited
    Q.enqueue(start_v)
    while Q is not empty do
        v := Q.dequeue()
        if v is the goal then
            return v
        for all edges from v to w in G.adjacentEdges(v) do
            if w is not marked as visited then
                label w as visited
                w.parent := v
                Q.euqueue(w)

 

์ˆ˜๋„์ฝ”๋“œ๋ฅผ ์‚ดํŽด๋ณด๋ฉด ํ•˜๋‚˜์˜ ์ •์ ์— ๋Œ€ํ•œ ์ธ์ ‘ ๊ฐ„์„ ์„ ๋ชจ๋‘ ์ถ”์ถœํ•˜๊ณ  ๋„์ฐฉ์ ์ธ ์ •์ ์„ ํ์— ์‚ฝ์ž…ํ•˜๋Š” ๋ฐฉ์‹์œผ๋กœ ๋™์ž‘ํ•œ๋‹ค.
์ฝ”๋“œ์˜ ์ „๊ฐœ๋Š” ์•ž์˜ DFS ์Šคํƒ ๊ตฌํ˜„๊ณผ ํฌ๊ฒŒ ๋‹ค๋ฅด์ง€ ์•Š๋‹ค.
๋‹ค๋งŒ, ์—ฌ๊ธฐ์„œ๋Š” FIFO ๊ตฌ์กฐ์˜ ํ๋ฅผ ํ™œ์šฉํ–ˆ๊ธฐ ๋•Œ๋ฌธ์— ๋„ˆ๋น„ ์šฐ์„  ํƒ์ƒ‰, ์ฆ‰ ๊ฐ€๊นŒ์šด ์ •์ ๋ถ€ํ„ฐ ๋ชจ๋‘ ํƒ์ƒ‰ํ•ด๋‘๊ณ  ๊ทธ ๋‹ค์Œ ๊ฑฐ๋ฆฌ์˜ ์ •์ ์œผ๋กœ ํƒ์ƒ‰ ๋ฒ”์œ„๋ฅผ ๋„“ํ˜€๋‚˜๊ฐ€๋Š” ์šดํ–‰ ๋ฐฉ์‹์ด ๊ฐ€๋Šฅํ•ด์ง€๋Š” ๊ฒƒ์ด๋‹ค.

<python code>

def bfs(start_v):
    visited = [start_v]
    Q = deque([start_v])
    while Q:
        v = Q.popleft()
        for w in graph[v]:
            if w not in visited:
                visited.append(w)
                Q.append(w)

    return visited

 

 

 

 

 

ํšจ์œจ์„ฑ

- ์•ž์„œ ์–ธ๊ธ‰ํ–ˆ๋˜ DFS์™€ ๋‹ค๋ฅด์ง€ ์•Š๋‹ค.

  • ์‹œ๊ฐ„ ๋ณต์žก๋„
์ธ์ ‘ ํ–‰๋ ฌ์˜ ๊ฒฝ์šฐ ํ•˜๋‚˜์˜ ์ •์  ๋‹น n๋ฒˆ check๋ฅผ ํ•ด์ฃผ์–ด์•ผ ํ•˜๊ธฐ ๋•Œ๋ฌธ์— O(n^2)์ด๋‹ค.
์ธ์ ‘ ๋ฆฌ์ŠคํŠธ์˜ ๊ฒฝ์šฐ ์ •์  ๋ฐฉ๋ฌธ & ํ•ด๋‹น ์ •์ ์˜ ์ธ์ ‘ ์ •์  ๋ฐฉ๋ฌธ์ด๋ฏ€๋กœ O(n+m)์ด๋‹ค.
์‹œ๊ฐ„ ๋ณต์žก๋„์˜ ๊ฒฝ์šฐ์—๋Š” ๊ฒฐ๊ตญ์—” ์–ด๋–ค ์ •์ ์„ ํƒ์ƒ‰ํ•˜๋Š๋ƒ์˜ ๋ฌธ์ œ์ด๊ธฐ ๋•Œ๋ฌธ์— ๊ณต๊ฐ„ ๋ณต์žก๋„์™€ ๋™์ผํ•˜๋‹ค.

 

  • ๊ณต๊ฐ„ ๋ณต์žก๋„
๊ณต๊ฐ„ ๋ณต์žก๋„์˜ ๊ฒฝ์šฐ, ๊ทธ๋ž˜ํ”„์™€ visited, ์Šคํƒ์„ ๋ชจ๋‘ ๊ณ ๋ คํ•ด์ฃผ์–ด์•ผ ํ•˜๊ธฐ์— ๊ทธ๋ž˜ํ”„์˜ ๊ณต๊ฐ„๋ณต์žก๋„๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค.
์ธ์ ‘ ํ–‰๋ ฌ์˜ ๊ฒฝ์šฐ์—๋Š” ํ•˜๋‚˜์˜ ์ •์ ๊ณผ ๋ชจ๋“  ์ •์  ๊ฐ„์˜ ์—ฐ๊ฒฐ ๊ด€๊ณ„๋ฅผ ๋‹ค ํ‘œํ˜„ํ•ด์ฃผ์–ด์•ผ ํ•˜๊ธฐ ๋•Œ๋ฌธ์— O(n^2)์ด๋‹ค.
์ธ์ ‘ ๋ฆฌ์ŠคํŠธ์˜ ๊ฒฝ์šฐ์—๋Š” ๊ทธ๋ž˜ํ”„ ๋‚ด ์ •์  ๊ฐœ์ˆ˜๋ฅผ n, ๊ฐ„์„  ๊ฐœ์ˆ˜๋ฅผ m์ด๋ผ๊ณ  ํ•  ๋•Œ O(n+m)์ด๋‹ค.

๊ฒฐ๊ณผ์ ์œผ๋กœ ๊ณต๊ฐ„๋ณต์žก๋„๋Š” ๊ทธ๋ž˜ํ”„์˜ ๊ณต๊ฐ„๋ณต์žก๋„๋ฅผ ๋”ฐ๋ผ ๊ฐ€๊ฒŒ ๋œ๋‹ค.

BFS์˜ ํšจ์œจ์„ฑ์— ๋Œ€ํ•ด ๋งํ•  ๊ฒฝ์šฐ, ์Šคํƒ๊ณผ visited๋Š” ๋ชจ๋‘ O(n)์˜ ๊ณต๊ฐ„๋ณต์žก๋„๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ๋‹ค (์ •์  ๊ฐœ์ˆ˜ n).
์ด๋Š” ๊ทธ๋ž˜ํ”„๊ฐ€ ์ธ์ ‘ ํ–‰๋ ฌ์ด๋‚˜ ์ธ์ ‘ ๋ฆฌ์ŠคํŠธ๋กœ ๊ตฌํ˜„๋˜์–ด ์žˆ๋“  ๋‘ ๊ฐ€์ง€ ๊ฒฝ์šฐ ๋ชจ๋‘์— ํ•ด๋‹นํ•œ๋‹ค.

 

 
 
 

๐Ÿง ๋ฐฑ์ค€ 1260 (DFS์™€  BFS)



๐Ÿค”
 Algorithm ๊ณผ์ •_ DFS 

1. ๊ทธ๋ž˜ํ”„๋ฅผ ์ธ์ ‘๋ฆฌ์ŠคํŠธ๋กœ ์ €์žฅํ•œ๋‹ค. (๋ฌด๋ฐฉํ–ฅ ๊ทธ๋ž˜ํ”„์ด๊ธฐ์— ์–‘์ชฝ๋ฐฉํ–ฅ์œผ๋กœ ๊ฐ„์„ ์„ ๋ชจ๋‘ ์ €์žฅํ•œ๋‹ค.)
2. ๋ฐฉ๋ฌธ๋ฆฌ์ŠคํŠธ๋ฅผ ๋ชจ๋‘ False๋กœ ์ดˆ๊ธฐํ™”ํ•œ๋‹ค.
3. ์žฌ๊ท€๋ฅผ ์ด์šฉํ•œ DFS๋ฅผ ์ˆ˜ํ–‰ํ•˜๋Š”๋ฐ, ์•„๋ž˜์™€ ๊ฐ™์ด ์ง„ํ–‰ํ•œ๋‹ค.



๐Ÿค” Algorithm ๊ณผ์ •_ BFS 
1. ๊ทธ๋ž˜ํ”„๋ฅผ ์ธ์ ‘๋ฆฌ์ŠคํŠธ๋กœ ์ €์žฅํ•œ๋‹ค. (๋ฌด๋ฐฉํ–ฅ ๊ทธ๋ž˜ํ”„์ด๊ธฐ์— ์–‘์ชฝ๋ฐฉํ–ฅ์œผ๋กœ ๊ฐ„์„ ์„ ๋ชจ๋‘ ์ €์žฅํ•œ๋‹ค.)
2. ๋ฐฉ๋ฌธ๋ฆฌ์ŠคํŠธ๋ฅผ ๋ชจ๋‘ False๋กœ ์ดˆ๊ธฐํ™”ํ•œ๋‹ค. (์ด๋•Œ, ์œ„์˜ DFS์—์„œ ์‚ฌ์šฉํ–ˆ๊ธฐ์— ์ดˆ๊ธฐํ™”๋ฅผ ๋ฐ˜๋“œ์‹œ ํ•ด์ค˜์•ผ ํ•œ๋‹ค!)
3. BFS๋ฅผ ์ˆ˜ํ–‰ํ•˜๋Š”๋ฐ, ์•„๋ž˜์™€ ๊ฐ™์ด ์ง„ํ–‰ํ•œ๋‹ค.

์ด๋ฅผ ํ’€์ดํ•˜๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค.

1. ํ ์ž๋ฃŒ๊ตฌ์กฐ์— starting_vertex ์‚ฝ์ž…
visit_list์— ํ˜„์žฌ vertex ๊ธฐ๋ก

2. while (ํ๊ฐ€ ๋นŒ ๋•Œ ๊นŒ์ง€):
	ํ์—์„œ vertex๋ฅผ ๊ฐ€์ ธ์™€ ์ถœ๋ ฅ
    ํ˜„์žฌ vertex์˜ ์—ฐ๊ฒฐvertex ์ค‘ ๋ฏธ๋ฐฉ๋ฌธ vertex๋ฅผ ํ์— ์‚ฝ์ž…(append)
    ๋ฐฉ๋ฌธ๋ฆฌ์ŠคํŠธ์— ๊ธฐ๋ก



๐Ÿคซ  solution_1260

import sys
input = sys.stdin.readline

V, E, starting_vertex = map(int, input().split())

# graph๋ผ๋Š” ์ธ์ ‘๋ฆฌ์ŠคํŠธ ์ƒ์„ฑ
#         [1]      [2]     [3]       [4]
# [[], [2, 3, 4], [1, 4], [1, 4], [1, 2, 3], []]
graph = [[] for _ in range(V+1)]
for _ in range(E):
    u, v = map(int, input().split())
    graph[u].append(v)
    graph[v].append(u)

# ์ •์ ์— ์šฐ์„ ์ˆœ์œ„๊ฐ€ ๋ถ€์—ฌ๋˜์—ˆ์œผ๋ฏ€๋กœ ์ •๋ ฌ
for i in range(V+1):
    graph[i].sort()

# ๋ฐฉ๋ฌธ๋ฆฌ์ŠคํŠธ ์ƒ์„ฑ
visit_list = [False] * (V+1)

def DFS(v):
    print(v, end = " ")
    visit_list[v] = True
    for i in graph[v]:
        if not visit_list[i]:
            DFS(i)

from collections import deque
def BFS(v):
    queue = deque()
    queue.append(v)
    visit_list[v] = True
    while queue:
        curr_vertex = queue.popleft()
        print(curr_vertex, end = " ")
        for i in graph[curr_vertex]:
            if not visit_list[i]:
                visit_list[i] = True
                queue.append(i)


# DFS ์ถœ๋ ฅ
DFS(starting_vertex)
print()

visit_list = [False] * (V+1)    # ๋ฆฌ์ŠคํŠธ ์ดˆ๊ธฐํ™”
# BFS ์ถœ๋ ฅ
BFS(starting_vertex)

 

+ Recent posts