ํ’€์ด


๊ทธ๋ž˜ํ”„ํƒ์ƒ‰์„ ์ดํ•ดํ•˜๊ธฐ ์œ„ํ•œ ๊ธฐ๋ณธ๋ฌธ์ œ์ด๋‹ค.

์ •์ ๊ณผ ๊ฐ„์„ ์ด ์ฃผ์–ด์กŒ์„ ๋•Œ ์ด๋ฅผ DFS ์™€ BFS ๋ฅผ ํ†ตํ•ด ์ˆ˜ํ–‰ํ•  ๊ฒฝ์šฐ ๋ฐฉ๋ฌธ๋œ ์ˆœ์„œ๋Œ€๋กœ ์ถœ๋ ฅํ•˜๋Š” ๋ฌธ์ œ๋‹ค.

์ž…๋ ฅ์œผ๋กœ ๊ฐ ์ •์  ๊ฐ„์˜ ๊ฐ„์„  ์ •๋ณด๋ฅผ ๋ฐ›๊ธฐ ๋•Œ๋ฌธ์— ์ธ์ ‘ ๋ฆฌ์ŠคํŠธ๋ฅผ ํ†ตํ•ด ๋ฌธ์ œ๋ฅผ ๊ตฌํ˜„ํ•  ์ˆ˜ ๋„ ์žˆ์—ˆ์ง€๋งŒ, ์ธ์ ‘ ํ–‰๋ ฌ์„ ํ†ตํ•ด ๋ฌธ์ œ๋ฅผ ํ’€์—ˆ๋‹ค.

์ •์  a ์™€ b ๊ฐ€ ๊ฐ„์„ ์ด๊ธฐ ๋•Œ๋ฌธ์— ์ธ์ ‘ํ–‰๋ ฌ์—์„  graph[a][b] = graph[b][a] = 1.

์ฆ‰, ์„œ๋กœ ์—ฐ๊ฒฐ๋˜์–ด ์žˆ๋‹ค๋Š” ์ •๋ณด๋ฅผ ์ €์žฅํ•  ์ˆ˜ ์žˆ๋‹ค.

์ €์žฅ๋œ ๊ทธ๋ž˜ํ”„๋ฅผ ํ†ตํ•ด DFS ์™€ BFS ๋ฅผ ์ˆ˜ํ–‰ํ•˜๊ธฐ ์ „, ๋ฐฉ๋ฌธ์ฒ˜๋ฆฌ๋ฅผ ์œ„ํ•ด ๊ฐ ํƒ์ƒ‰๊ธฐ๋ฒ•์„ ์œ„ํ•œ visited ๋ฆฌ์ŠคํŠธ๋ฅผ ์„ ์–ธํ•ด์ค€๋‹ค.

์ดํ›„ BFS ์—์„œ๋Š” ํ๋ฅผ ํ™œ์šฉํ•ด 1 ์„ ์‹œ์ž‘์œผ๋กœ 1 ๊ณผ ์ธ์ ‘ํ•œ ์ˆ˜๋ฅผ ์ธ์ ‘ํ–‰๋ ฌ์˜ ์ขŒํ‘œ๋ฅผ ํ†ตํ•ด ๊ตฌํ•ด๋‚ธ๋‹ค.

์ด ๋•Œ ๋ฐฉ๋ฌธํ•˜์ง€ ์•Š์•˜๋˜ ์ •์ ์ด๋ผ๋ฉด ํ์— ํ•ด๋‹นํ•˜๋Š” ์ •์ ์„ ์‚ฝ์ž…ํ•˜๊ณ  ๋ฐฉ๋ฌธ์ฒ˜๋ฆฌ๋ฅผ ํ•ด์ฃผ๋ฉด๋œ๋‹ค.

DFS ์—์„œ๋Š” ์žฌ๊ท€๋ฅผ ํ™œ์šฉํ•ด ๋ฐฉ๋ถ„ํ•˜์ง€ ์•Š์•˜๋˜ ์ •์ ์ด๋ผ๋ฉด DFS ๋ฅผ ์žฌ๊ท€์ ์œผ๋กœ ์‹คํ–‰์‹œ์ผœ์ฃผ๋Š” ๋ฐฉ์‹์œผ๋กœ ๊ตฌํ˜„๋œ๋‹ค.

์†Œ์Šค์ฝ”๋“œ


# DFS์™€ BFS
from collections import deque
import sys
input = sys.stdin.readline
 
def bfs(v):
    q = deque()
    q.append(v)
    b_visited[v] = 1
    while q:
        v = q.popleft()
        print(v, end=" ")
        for i in range(1, n+1):
            if b_visited[i] == 0 and graph[v][i] == 1:
                q.append(i)
                b_visited[i] = 1
 
def dfs(v):
    d_visited[v] = 1
    print(v, end=" ")
    for i in range(1, n+1):
        if d_visited[i] == 0 and graph[v][i] == 1:
            dfs(i)
 
n, m, v = map(int, input().split())
 
graph = [[0] * (n+1) for _ in range(n+1)]
d_visited = [0] * (n+1)
b_visited = [0] * (n+1)
 
for _ in range(m):
    a, b = map(int, input().split())
    graph[a][b] = graph[b][a] = 1
 
dfs(v)
print()
bfs(v)

References