ํ์ด
๊ทธ๋ํํ์์ ์ดํดํ๊ธฐ ์ํ ๊ธฐ๋ณธ๋ฌธ์ ์ด๋ค.
์ ์ ๊ณผ ๊ฐ์ ์ด ์ฃผ์ด์ก์ ๋ ์ด๋ฅผ 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)