๐ ๊ณต๋ถํ๋ ์ง์ง์ํ์นด๋ ์ฒ์์ด์ง?
[BAEKJOON python] 1260_DFS์ BFS ๋ณธ๋ฌธ
728x90
๋ฐ์ํ
๊ทธ๋ํ๋ฅผ DFS๋ก ํ์ํ ๊ฒฐ๊ณผ์ BFS๋ก ํ์ํ ๊ฒฐ๊ณผ๋ฅผ ์ถ๋ ฅํ๋ ํ๋ก๊ทธ๋จ์ ์์ฑํ์์ค.
๋จ, ๋ฐฉ๋ฌธํ ์ ์๋ ์ ์ ์ด ์ฌ๋ฌ ๊ฐ์ธ ๊ฒฝ์ฐ์๋ ์ ์ ๋ฒํธ๊ฐ ์์ ๊ฒ์ ๋จผ์ ๋ฐฉ๋ฌธํ๊ณ , ๋ ์ด์ ๋ฐฉ๋ฌธํ ์ ์๋ ์ ์ด ์๋ ๊ฒฝ์ฐ ์ข ๋ฃํ๋ค.
์ ์ ๋ฒํธ๋ 1๋ฒ๋ถํฐ N๋ฒ๊น์ง์ด๋ค.์ฒซ์งธ ์ค์ ์ ์ ์ ๊ฐ์ N(1 ≤ N ≤ 1,000), ๊ฐ์ ์ ๊ฐ์ M(1 ≤ M ≤ 10,000), ํ์์ ์์ํ ์ ์ ์ ๋ฒํธ V๊ฐ ์ฃผ์ด์ง๋ค.
๋ค์ M๊ฐ์ ์ค์๋ ๊ฐ์ ์ด ์ฐ๊ฒฐํ๋ ๋ ์ ์ ์ ๋ฒํธ๊ฐ ์ฃผ์ด์ง๋ค.์ด๋ค ๋ ์ ์ ์ฌ์ด์ ์ฌ๋ฌ ๊ฐ์ ๊ฐ์ ์ด ์์ ์ ์๋ค.
์ ๋ ฅ์ผ๋ก ์ฃผ์ด์ง๋ ๊ฐ์ ์ ์๋ฐฉํฅ
from collections import deque
n, m, v = map(int, input().split())
# 1. graph์ visited ๋ฆฌ์คํธ
graph = [[0] * (n + 1) for _ in range(n + 1)]
visited = [False] * (n + 1)
# 2, grahp์ ๊ฐ์ ๋
ธ๋ ์ถ๊ฐ
for _ in range(m): # m์ ๊ฐ์ ๊ฐ์
x, y = map(int, input().split())
graph[x][y] = 1 # ์ ์ด ์๋ฐฉํฅ์ด๊ธฐ ๋๋ฌธ์ x->y y->x ๋๋ค ๊ฐ๋ ๊ฑฐ๋ก ์๊ฐ
graph[y][x] = 1
def dfs(graph, v):
visited[v] = True # ํ์ ์์ ์ ์ ์ด v
print(v, end=" ")
for i in range(len(graph[v])):
if graph[v][i] == 1 and visited[i] == False:
dfs(graph, i)
def bfs(graph, v):
queue = deque([v])
visited = [False] * (n + 1) # ์ด๊ธฐํ
visited[v] = True # ํ์ ์์ ์ ์ ์ด v
while queue: # ํ ๊ฐ ์์ ๋๊น์ง
v = queue.popleft() # ๋ฐฉ๋ฌธํ ๋
ธ๋ pop! ์ ์์ ์ ๊ฑฐ
print(v, end=" ")
for i in range(len(graph[v])):
if graph[v][i] == 1 and visited[i] == False: # i ๋ค๋
๊ฐ๊ณ ๋
ธ๋ ๊ฐ 1
queue.append(i)
visited[i] = True
return visited
dfs(graph, v)
print()
bfs(graph, v)
# input
# 4 5 1
# 1 2
# 1 3
# 1 4
# 2 4
# 3 4
# output
# 1 2 4 3
# 1 2 3 4
728x90
๋ฐ์ํ
'๐ฆฅ ์ฝํ > BAEKJOON' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[BAEKJOON python] 2606_๋ฐ์ด๋ฌ์ค (0) | 2022.10.06 |
---|---|
[BAEKJOON python] 2178_๋ฏธ๋กํ์ (0) | 2022.10.06 |
[v.๋์ ๊ณํ๋ฒ 1-์ ๋๋ ํจ์ ์คํ-9184]BAEKJOON_Python (0) | 2022.01.27 |
[v.๋์ ๊ณํ๋ฒ 1-ํผ๋ณด๋์น ํจ์-1003]BAEKJOON_Python (0) | 2022.01.27 |
[v.๋ฐฑํธ๋ํน-์คํํธ์ ๋งํฌ-14889]BAEKJOON_Python (0) | 2022.01.27 |
Comments