DFS์ BFS 1๋จ๊ณ - 1260๋ฒ DFS์ BFS
๋ฌธ์
๊ทธ๋ํ๋ฅผ DFS๋ก ํ์ํ ๊ฒฐ๊ณผ์ BFS๋ก ํ์ํ ๊ฒฐ๊ณผ๋ฅผ ์ถ๋ ฅํ๋ ํ๋ก๊ทธ๋จ์ ์์ฑํ์์ค. ๋จ, ๋ฐฉ๋ฌธํ ์ ์๋ ์ ์ ์ด ์ฌ๋ฌ ๊ฐ์ธ ๊ฒฝ์ฐ์๋ ์ ์ ๋ฒํธ๊ฐ ์์ ๊ฒ์ ๋จผ์ ๋ฐฉ๋ฌธํ๊ณ , ๋ ์ด์ ๋ฐฉ๋ฌธํ ์ ์๋ ์ ์ด ์๋ ๊ฒฝ์ฐ ์ข ๋ฃํ๋ค. ์ ์ ๋ฒํธ๋ 1๋ฒ๋ถํฐ N๋ฒ๊น์ง์ด๋ค.
์ ๋ ฅ
์ฒซ์งธ ์ค์ ์ ์ ์ ๊ฐ์ N(1 ≤ N ≤ 1,000), ๊ฐ์ ์ ๊ฐ์ M(1 ≤ M ≤ 10,000), ํ์์ ์์ํ ์ ์ ์ ๋ฒํธ V๊ฐ ์ฃผ์ด์ง๋ค. ๋ค์ M๊ฐ์ ์ค์๋ ๊ฐ์ ์ด ์ฐ๊ฒฐํ๋ ๋ ์ ์ ์ ๋ฒํธ๊ฐ ์ฃผ์ด์ง๋ค. ์ด๋ค ๋ ์ ์ ์ฌ์ด์ ์ฌ๋ฌ ๊ฐ์ ๊ฐ์ ์ด ์์ ์ ์๋ค. ์ ๋ ฅ์ผ๋ก ์ฃผ์ด์ง๋ ๊ฐ์ ์ ์๋ฐฉํฅ์ด๋ค.
์ถ๋ ฅ
์ฒซ์งธ ์ค์ DFS๋ฅผ ์ํํ ๊ฒฐ๊ณผ๋ฅผ, ๊ทธ ๋ค์ ์ค์๋ BFS๋ฅผ ์ํํ ๊ฒฐ๊ณผ๋ฅผ ์ถ๋ ฅํ๋ค. V๋ถํฐ ๋ฐฉ๋ฌธ๋ ์ ์ ์์๋๋ก ์ถ๋ ฅํ๋ฉด ๋๋ค.
์์ ์ ๋ ฅ 1
4 5 1
1 2
1 3
1 4
2 4
3 4
์์ ์ถ๋ ฅ 1
1 2 4 3
1 2 3 4
์์ ์ ๋ ฅ 2
5 5 3
5 4
5 2
1 2
3 4
3 1
์์ ์ถ๋ ฅ 2
3 1 2 5 4
3 1 4 2 5
์์ ์ ๋ ฅ 3
1000 1 1000
999 1000
์์ ์ถ๋ ฅ 3
1000 999
1000 999
์ ์ถ
# 1260๋ฒ - DFS์ BFS
def dfs(v):
# ๋ฐฉ๋ฌธํ ๊ณณ์ 1
visited[v] = 1
print(v, end=' ')
# ํ์ฌ ๋
ธ๋์ ์ฐ๊ฒฐ๋ ๋ค๋ฅธ ๋
ธ๋๋ฅผ ์ฌ๊ท์ ์ผ๋ก ๋ฐฉ๋ฌธ
for i in range(1, n + 1):
if visited[i] == 0 and graph[v][i] == 1:
dfs(i)
def bfs(v):
queue = [v]
visited[v] = 0
while queue:
# ํ์์ ํ๋์ ์์๋ฅผ ๋ฝ์ ์ถ๋ ฅ
v = queue.pop(0)
print(v, end=' ')
for i in range(1, n + 1):
if visited[i] == 1 and graph[v][i] == 1:
queue.append(i)
visited[i] = 0
# n = ์ ์ ์ ๊ฐ์
# m = ๊ฐ์ ์ ๊ฐ์
# v = ์์ ์ ์ ์ ๋ฒํธ
n, m, v = map(int, input().split())
graph = [[0] * (n + 1) for i in range(n + 1)]
visited = [0] * (n + 1)
for i in range(m):
i, j = map(int, input().split())
graph[i][j] = graph[j][i] = 1
dfs(v)
print()
bfs(v)