๋ฐฑ์ค | Baekjoon
[๋ฐฑ์ค][1260] DFS์ BFS | ํ์ด์ฌ
sungkshon
2024. 5. 13. 06:07
๋ฐ์ํ
๐ ๋ฌธ์ ๋ถ์
DFS๋ก ํ์ํ ๊ฒฐ๊ณผ์ BFS๋ก ํ์ํ ๊ฒฐ๊ณผ๋ฅผ ์ถ๋ ฅ
๋ฐฉ๋ฌธํ ์ ์๋ ์ ์ด ์ฌ๋ฌ๊ฐ์ธ ๊ฒฝ์ฐ ์ ์ ๋ฒํธ๊ฐ ์์ ๊ฒ์ ๋จผ์ ๋ฐฉ๋ฌธ
๋์ด์ ๋ฐฉ๋ฌธํ ์ ์๋ ์ ์ด ์๋ ๊ฒฝ์ฐ ์ข ๋ฃ


๐ ์๊ณ ๋ฆฌ์ฆ ์ค๊ณ
- ์ ๋ ฅ ์ด๊ธฐํ
- graph์ ๋ณด ์ ๋ ฅ
- dfs
- bfs
๐ ์ฝ๋
import sys
def dfs(idx):
global visited
visited[idx] = True # ๋ฐฉ๋ฌธํ ๋
ธ๋๋ true
print(idx, end = ' ')
for next in range(1, n+1):
if not visited[next] and graph[idx][next]:
dfs(next)
def bfs():
global q, visited # q:ํ
while q: # ํ์ ์์๊ฐ ๋จ์์์๋๊น์ง
cur = q.pop(0) # ํ์ ๊ฐ์ฅ ์ฒซ๋ฒ์งธ ์์๋ฅผ ๋บด๋ธ๋ค
print(cur, end = ' ')
for next in range(1, n+1): # cur์์ ๊ฐ ์ ์๋ ๋
ธ๋๋ฅผ์ q์ ๋ฃ์ด์ค๋ค
if not visited[next] and graph[cur][next]: # ๋ฐฉ๋ฌธ ๋์ ์ด ์๋์ง ํ์ธ
visited[next] = True # ๋ฐฉ๋ฌธํ ์ ์๋ค๋ฉด True๋ก ๋ฐ๊ฟ์ค๋ค.
q.append(next) # ํ์ ๋งจ ๋์ ๋ฃ์ด์ค๋ค.
# ์
๋ ฅ ์ด๊ธฐํ
input = sys.stdin.readline
n, m, v = map(int, input().split())
graph = [[False]*(n+1) for _ in range(n+1)] # (n+1)x(n+1) 2์ฐจ์ ๋ฐฐ์ด
visited = [False] * (n+1) # 1์ฐจ์ ๋ฐฐ์ด
# ๊ทธ๋ํ ์ ๋ณด ์
๋ ฅ
for _ in range(m):
a, b = map(int, input().split())
graph[a][b] = True
graph[b][a] = True
# dfs
dfs(v) # v๋ถํฐ dfsํจ์ ์์
print() # ์ค๋ฐ๊ฟ์ ํด์ฃผ๊ธฐ ์ํด์
# bfs
visited = [False] * (n+1) # ๋ฐฉ๋ฌธ์ ์ํ๋ค๊ณ ์น๊ณ ๋ค์ bfs๋ฅผ ํด์ค์ผ ํ๋๊น ๋ค False๋ก ๋ฐ๊ฟ์ค๋ค.
q = [v] # ํ์ v๋ฅผ ๋ด์์ค๋ค. (v๋ถํฐ ์์ํ ๊ฑฐ๋๊น)
visited[v] = True # v๋ฅผ ์ฌ๋ฐฉ๋ฌธ ํ์ง ์๋๋ก
bfs()
๐ ์๊ฐ ๋ณต์ก๋
O(n^2)
๐ ํ๋ฆฐ ์ด์
์ ๊ทผ ๋ฐฉ์์ด ํ๋ฆผ
์ด๋ก ์ ๊ณต๋ถํ๊ณ ํ์ด๋ดค๋๋ฐ ์ฝ๋๋ฅผ ๊ตฌํํ๋๋ฐ ์ด๋ ค์์ ๊ฒช์๋ค.
๐ ๋๋์ or ๊ธฐ์ตํ ์ ๋ณด
dfs์ bfs์ฝ๋์ ๊ตฌ์กฐ๋ฅผ ์ตํ๋์ด์ผ ํ ๊ฒ ๊ฐ๋ค.
๋ฐ์ํ