[๋ฐฑ์ค]1260 - Dfs, Bfs
๐ก๋ฌธ์ ๋ถ์ ์์ฝ
-- ๋ฌธ์ --
์ ๋ ฅ : N(์ ์ ๊ฐ์), M(๊ฐ์ ๊ฐ์),V(์ ์ ๋ฒํธ)
DFS๋ก ํ์ํ ๊ฒฐ๊ณผ์ BFS๋ก ํ์ํ ๊ฒฐ๊ณผ๋ฅผ ์ถ๋ ฅ
์ ์ ๋ฒํธ๊ฐ ์์ ๊ฒ์ ๋จผ์ ๋ฐฉ๋ฌธ
์ ์ ๋ฒํธ๋ 1๋ฒ๋ถํฐ N๋ฒ
๋ฐฉ๋ฌธํ ์ ์๋ ์ ์ด ์๋ ๊ฒฝ์ฐ ์ข ๋ฃ
๐ก์๊ณ ๋ฆฌ์ฆ ์ค๊ณ
input์ ํตํด N, M,V ์ ๋ ฅ
๋ฐฉ๋ฌธ ๋ฆฌ์คํธ ์์ฑ
dfs, bfs ํจ์ ์ด์ฉ
๐ก์ฝ๋
N, M, V = map(int,input().split())
visit=[0]*(N+1)
def dfs(V):
visit[V]
print(V, end=' ')
๐ก์๊ฐ๋ณต์ก๋
O(N)
๐กํ๋ฆฐ ์ด์
- ์กฐ๊ฑด์ ํ ๋ฒ ๋๊ณ ๋์ ๊ทธ ๋ค์ ์์๋ฅผ ์ด๋ป๊ฒ ์ฒ๋ฆฌ ํด์ผํ ์ง ๋ชจ๋ฆ.
๐กํ๋ฆฐ ๋ถ๋ถ ์์ or ๋ค๋ฅธ ํ์ด
N,M,V = map(int,input().split())
#ํ๋ ฌ ๋ง๋ค๊ธฐ
graph = [[0]*(N+1) for _ in range(N+1)]
for i in range (M):
a,b = map(int,input().split())
graph[a][b] = graph[b][a] = 1
#๋ฐฉ๋ฌธ ๋ฆฌ์คํธ ํ๋ ฌ
visited1 = [0]*(N+1)
visited2 = visited1.copy()
#dfs ํจ์ ๋ง๋ค๊ธฐ
def dfs(V):
visited1[V] = 1 #๋ฐฉ๋ฌธ์ฒ๋ฆฌ
print(V, end=' ')
for i in range(1, N+1):
if graph[V][i] == 1 and visited1[i] == 0:
dfs(i)
#bfs ํจ์ ๋ง๋ค๊ธฐ
def bfs(V):
queue = [V]
visited2[V] = 1 #๋ฐฉ๋ฌธ์ฒ๋ฆฌ
while queue:
V = queue.pop(0) #๋ฐฉ๋ฌธ ๋
ธ๋ ์ ๊ฑฐ
print(V, end = ' ')
for i in range(1, N+1):
if(visited2[i] == 0 and graph[V][i] == 1):
queue.append(i)
visited2[i] = 1 # ๋ฐฉ๋ฌธ์ฒ๋ฆฌ
dfs(V)
print()
bfs(V)
๐ก๋๋์ or ๊ธฐ์ต ํ ์ ๋ณด
์ฒ์ ์ฝํ ๋ฅผ ์ ํ๋ค๋ณด๋ ์ ๊ทผํ๋๋ฐ ์ด๋ ค์์ ๋๋. -> ๋ฌธ์ ๋ง์ด ์ ํด๋ณด๊ธฐ.
๊ฐ๋ ๋ง ๊ณต๋ถํ์ง ๋ง๊ณ ๊ธฐ๋ณธ ๊ตฌํํ ์ฝ๋ ๋ง์ด ์ ํด๋ณด๊ธฐ.
ํ๋ ฌ ๋ง๋ค ๋ ์ฃผ๋ก ์ฐ๋ ๋ฆฌ์คํธ ์ปดํ๋ฆฌํจ์ ๋ฌธ๋ฒ ๊ธฐ์ตํ๊ธฐ.
40๋ถ ์ด์ ๊ณ ๋ฏผํด๋ณด๊ณ ์ฝ๋ ์๋์ค๋ฉด ๋จผ์ ํ์ด ํ์ธํ๊ณ ๊ตฌํํด๋ณด๊ธฐ.
์ต์ํด์ง ๋ ๊น์ง ๋ ๊ผญ ํ์ด๋ณด๊ธฐ.
ย