728x90
๐ ๋ฐฑ์ค 1260 - DFS์ BFS
๐ก ๋์ ํ์ด
BFS
์ DFS
๋ฅผ ๋ ๋ค ์ฌ์ฉํด์ผ ํ๋ ๋ฌธ์ ์ธ๋ฐ ํ์ด ๋ฐฉ๋ฒ์ ๋ค์๊ณผ ๊ฐ๋ค. ๋ฌธ์ ์์ ์ ์ ๋ฒํธ๊ฐ ์์ ๊ฒ์ ๋จผ์ ๋ฐฉ๋ฌธํ๋ค.
๋ฅผ ํตํด ์
๋ ฅ๊ฐ์ ์ธ์ ๋ฆฌ์คํธ(adjacent list)
์ผ๋ก ๋ฃ์ ๋ sort
๋ฅผ ๋ถ์ฌ ์์ ๊ฐ๋ถํฐ ๋ค์ด๊ฐ๊ฒ๋ ์ค์ ํ๋ค.
dfs
์ ๊ตฌํ ์์๋ ๋ค์๊ณผ ๊ฐ๋ค.
- ์ฒ์ ๋ค์ด์จ ๊ฐ
index
์flag
๋ฅผTrue
๋ก ๋ฐ๊พผ๋ค. - ๋ง์ฝ, ์ธ์ ๋
ธ๋๋ฅผ ๋ฐฉ๋ฌธํ์ง ์์๋ค๋ฉด(
flag = False
), ํด๋น ์ธ์ ๋ ธ๋๋ก ๋ค์ด๊ฐ์ ๋ฐฉ๋ฌธํ์ง ์์ ์ธ์ ๋ ธ๋๊ฐ ์์ ๋๊น์ง ๋ค์ด๊ฐ๋ค.(recursive
) - ์ฌ๊ท๋ฌธ์ ํ์ถํ๋ฉด์ ํด๋น ๊ฐ์ ํ๋์ฉ ์ถ๋ ฅํ๋ค.
728x90
bfs
์ ๊ตฌํ์์๋ ๋ค์๊ณผ ๊ฐ๋ค.
- ์ฒ์ ๋ค์ด์จ ๊ฐ์
queue
์ ๋ฃ๋๋ค. - ์ฒ์ ๋ค์ด์จ ๊ฐ
index
์flag
๋ฅผTrue
๋ก ๋ฐ๊พผ๋ค. - ๋จผ์ ๋ค์ด์จ ๊ฐ์
queue
์์ ๋จผ์ ๊บผ๋ด๋ฉด์ ๋ฐฉ๋ฌธํ์ง ์์ ์ธ์ ๋ ธ๋๊ฐ ์๋์ง ์ดํด๋ณด๊ณ , ์์ผ๋ฉด ํด๋น ๋ ธ๋๋ฅผqueue
์ ๋ฃ๋๋ค. queue
์ ๋จ์ ๊ฐ์ด ์์ ๋๊น์ง ๋ฐ๋ณตํ๋ค.queue
์์ ๊บผ๋ธ ๊ฐ์ ํ๋์ฉ ์ถ๋ ฅํ๋ค.
์ฌ๋ด์ด์ง๋ง, ์ด์ ํ์๋ ๋ฌธ์ ์ ๊ฐ์ ๋ฐฉ์์ผ๋ก ํ์๋๋ฐ ๊ฒฐ๊ณผ๋ ๋ค์๊ณผ ๊ฐ์๋ค.
sys.stdin.readline
์ ์ฌ์ฉํ๋๊น ์๊ฐ์ด 2๋ฐฐ๊ฐ๋ ์ค์ด๋ค์๋ค.flag(True)
๋ฐฉ์์ดappend
๋ฐฉ์๋ณด๋ค ์คํ์๊ฐ์ ์ฝ 4๋ฐฐ๊ฐ๋ ๋จ์ถ์์ผฐ๋ค.
์๋ํ๋ฉด,if i not in visited
๋ ๋ฐ๋ณต๋ฌธ์์ ์๋ ์์๋ค์ ํ๋์ฉ ๊ฒ์ฌํด์ผ ํ์ง๋ง,if not visited[i]
๋ ๋จ์ํ๊ฒTrue
,False
์ฌ๋ถ๋ง ๋ฐ์ง๋ฉด ๋๊ธฐ ๋๋ฌธ์ด๋ค. ์ฆ, ๋ ธ๋ ๊ฐ์n
์ด ์ปค์ง๊ฒ๋๋ฉด ๊ทธ๋งํผ ์ฐ์ฐ ํ์๊ฐ ๋์ด๋๋ค๋ ๋ฌธ์ ์ ์ด ์๋ค.
import sys
from collections import deque
input = sys.stdin.readline
def dfs(graph, v): # implementation dfs function
dfs_visited[v] = True
print(v, end=' ')
for i in graph[v]:
if not dfs_visited[i]:
dfs(graph, i)
def bfs(graph, start): # implementation bfs function
queue = deque([start])
bfs_visited[start] = True
while queue:
v = queue.popleft()
print(v, end=' ')
for i in graph[v]:
if not bfs_visited[i]:
queue.append(i)
bfs_visited[i] = True
N, M, V = map(int, input().split())
graph = [[] for _ in range(N+1)]
dfs_visited, bfs_visited = [False] * (N+1), [False] * (N+1) # flag init
for i in range(M):
node1, node2 = map(int, input().split())
graph[node1].append(node2)
graph[node2].append(node1)
graph = [sorted(i) for i in graph] # sort by ascending order
dfs(graph, V)
print()
bfs(graph, V)
๋ฐ์ํ
'Algorithm > ๋ฐฑ์ค(BOJ)' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[ ํ์ด์ฌ(python) ] ๋ฐฑ์ค 2331 - ๋ฐ๋ณต์์ด (0) | 2021.04.17 |
---|---|
[ ํ์ด์ฌ(python) ] ๋ฐฑ์ค 2667 - ๋จ์ง๋ฒํธ๋ถ์ด๊ธฐ (0) | 2021.04.16 |
[ ํ์ด์ฌ(python) ] ๋ฐฑ์ค 13458 - ์ํ๊ฐ๋ (0) | 2021.04.14 |
[python] ๋ฐฑ์ค 2445 - ๋ณ ์ฐ๊ธฐ 8 (2) | 2021.04.05 |
[python] ๋ฐฑ์ค 2442 - ๋ณ ์ฐ๊ธฐ 5 (0) | 2021.04.05 |
๋๊ธ