[๋ฐฑ์ค€] DFS์™€ BFS_1260๋ฒˆ

[๋ฐฑ์ค€] DFS์™€ BFS


๋ฌธ์ œ


๋งํฌ : BOJ





ํ’€์ด

DFS์™€ BFS์˜ ์ดํ•ด์— ๋Œ€ํ•œ ๋ฌธ์ œ์ด๋‹ค.
์ด์ „์— C++๋กœ ํ’€์—ˆ๋Š”๋ฐ ํŒŒ์ด์ฌ์œผ๋กœ ๋‹ค์‹œ ํ‘ผ ๊ฒฐ๊ณผ์ด๋‹ค.

๋จผ์ €, ํƒ์ƒ‰์„ ์‹œ์ž‘ํ•˜๊ธฐ ์ „์— ์ˆœ์„œ๋Œ€๋กœ ํƒ์ƒ‰ํ•˜๊ธฐ ์œ„ํ•ด 2์ฐจ์› ๋ฐฐ์—ด์— ๋‹ด๊ธด ์ˆ˜๋ฅผ ์ •๋ ฌํ•ด์•ผ ํ•œ๋‹ค.
๊ทธ๋ฆฌ๊ณ  ํƒ์ƒ‰์„ ์‹œ์ž‘ํ•˜๋Š” ๋ฐ dfs๋Š” ์žฌ๊ท€ ํ•จ์ˆ˜๋ฅผ ์ด์šฉํ•ด์„œ ํ’€์–ด์ค€๋‹ค. ๋ฐ˜๋ฉด์— bfs์—์„œ๋Š” deque๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์ด์šฉํ•ด์„œ ํ‘ผ๋‹ค.
deque(๋ฐํฌ)๋Š” double-ended queue ์˜ ์ค„์ž„๋ง๋กœ, ์•ž๊ณผ ๋’ค์—์„œ ์ฆ‰, ์–‘๋ฐฉํ–ฅ์—์„œ ๋ฐ์ดํ„ฐ๋ฅผ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ๋Š” queueํ˜• ์ž๋ฃŒ๊ตฌ์กฐ๋ฅผ ์˜๋ฏธํ•œ๋‹ค.
list์™€ ๋น„์Šทํ•˜๊ฒŒ append(), pop() ๋“ฑ์˜ ๋ฉ”์†Œ๋“œ๋ฅผ ์ด์šฉํ•  ์ˆ˜ ์žˆ๋‹ค. ์ถœ์ฒ˜EXCELSIOR

์„ ์ž…์„ ์ถœ์„ ์ด์šฉํ•˜๊ธฐ ์œ„ํ•ด append()์™€ popleft()๋ฅผ ์ด์šฉํ•œ๋‹ค.

from collections import deque
#dfs
def dfs(data, v, visited):
    visited[v] = True
    print(v, end=' ')
    for i in data[v]:
        if not visited[i]:
            dfs(data, i, visited)

#bfs
def bfs(data, start, visited):
    queue = deque([start])
    visited[start] = True
    while queue:
        v = queue.popleft()
        print(v, end=' ')
        for i in data[v]:
            if not visited[i]:
                queue.append(i)
                visited[i] = True

n, m, v = map(int, input().split())
data = []
for _ in range(n+1):
    data.append([])
for _ in range(m):
    x, y = map(int, input().split())
    data[x].append(y)
    data[y].append(x)
for i in range(n+1):
    data[i] = sorted(data[i])

visited = [False] * (n+1)

dfs(data, v, visited)
print()
visited = [False] * (n+1)
bfs(data, v, visited)

์‹ค์ˆ˜ํ–ˆ๋˜ ์ 


ํƒœ๊ทธ: , , ,

์นดํ…Œ๊ณ ๋ฆฌ:

์—…๋ฐ์ดํŠธ: