[๋ฐฑ์ค] 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)