๐BFS : ๋๋น์ฐ์ ํ์
๊ฐ๊น์ด ๋ ธ๋๋ถํฐ ํ์ํ๋ ์๊ณ ๋ฆฌ์ฆ
์ ์ ์ ์ถ ๋ฐฉ์์ธ ํ ์๋ฃ๊ตฌ์กฐ๋ฅผ ์ด์ฉ
๐๋์ ๋ฐฉ์
1. ํ์ ์์ ๋ ธ๋๋ฅผ ํ์ ์ฝ์ ํ๊ณ ๋ฐฉ๋ฌธ ์ฒ๋ฆฌ๋ฅผ ํ๋ค.
2. ํ์์ ๋ ธ๋๋ฅผ ๊บผ๋ด ํด๋น ๋ ธ๋์ ์ธ์ ๋ ธ๋ ์ค์์ ๋ฐฉ๋ฌธํ์ง ์์ ๋ ธ๋๋ฅผ ๋ชจ๋ ํ์ ์ฝ์ ํ๊ณ ๋ฐฉ๋ฌธ ์ฒ๋ฆฌ๋ฅผ ํ๋ค.
3. 2๋ฒ์ ๊ณผ์ ์ ๋ ์ด์ ์ํํ ์ ์์ ๋๊น์ง ๋ฐ๋ณตํ๋ค.
๐ํ์ ์์ ์๊ฐ : O(N)
from collections import deque
def bfs(graph, start, visited):
queue = deque([start])
visited[start] = True
while queue:
v=queue.popleft()
print(v,end='')
for i in graph[v]:
if not visited[i]:
queue.append(i)
visited[i] = True
graph = [
[],
[2,3,8],
[1,7],
[1,4,5],
[3,5],
[3,4],
[7],
[2,6,8],
[1,7]
]
visited = [False] * 9
bfs(graph,1,visited)
๐DFS : ๊น์ด ์ฐ์ ํ์
๊ทธ๋ํ์์ ๊น์ ๋ถ๋ถ์ ์ฐ์ ์ ์ผ๋ก ํ์ํ๋ ์๊ณ ๋ฆฌ์ฆ
ํน์ ํ ๊ฒฝ๋ก๋ก ํ์ํ๋ค๊ฐ ํน์ ํ ์ํฉ์์ ์ต๋ํ ๊น์์ด ๋ค์ด๊ฐ์ ๋ ธ๋๋ฅผ ๋ฐฉ๋ฌธํ ํ, ๋ค์ ๋์๊ฐ ๋ค๋ฅธ ๊ฒฝ๋ก๋ก ํ์ํ๋ ์๊ณ ๋ฆฌ์ฆ
๐์คํ ์๋ฃ๊ตฌ์กฐ ์ด์ฉ
๐๋์๊ณผ์
1. ํ์ ์์ ๋ ธ๋๋ฅผ ์คํ์ ์ฝ์ ํ๊ณ ๋ฐฉ๋ฌธ์ฒ๋ฆฌํ๋ค.
2. ์คํ์ ์ต์๋จ ๋ ธ๋์ ๋ฐฉ๋ฌธํ์ง ์์ ์ธ์ ๋ ธ๋๊ฐ ์์ผ๋ฉด, ๊ทธ ์ธ์ ๋ ธ๋๋ฅผ ์คํ์ ๋ฃ๊ณ ๋ฐฉ๋ฌธ์ฒ๋ฆฌ๋ฅผ ํ๋ค. ๋ฐฉ๋ฌธํ์ง ์์ ์ธ์ ๋ ธ๋๊ฐ ์์ผ๋ฉด ์คํ์์ ์ต์๋จ ๋ ธ๋๋ฅผ ๊บผ๋ธ๋ค.
3. 2๋ฒ์ ๊ณผ์ ์ ๋ ์ด์ ์ํํ ์ ์์ ๋๊น์ง ๋ฐ๋ณตํ๋ค.
๐ป ๋ฐฉ๋ฌธ ์ฒ๋ฆฌ๋ ์คํ์ ํ๋ฒ ์ฝ์ ๋์ด ์ฒ๋ฆฌ๋ ๋ ธ๋๊ฐ ๋ค์ ์ฝ์ ๋์ง ์๊ฒ ์ฒดํฌํ๋ ๊ฒ. ๋ฐฉ๋ฌธ์ฒ๋ฆฌ๋ฅผ ํจ์ผ๋ก์จ ๊ฐ ๋ ธ๋๋ฅผ ํ๋ฒ์ฉ๋ง ์ฒ๋ฆฌํ ์ ์๋ค.
def dfs(graph, v, visited):
#ํ์ฌ ๋
ธ๋๋ฅผ ๋ฐฉ๋ฌธ์ฒ๋ฆฌ
visited[v] = True
print(v, end=" ")
for i in graph[v]:
if not visited[i]:
dfs(graph, i , visited)
graph = [
[],
[2,3,8],
[1,7],
[1,4,5],
[3,5],
[3,4],
[7],
[2,6,8],
[1,7]
]
visited = [False] * 9
dfs(graph,1,visited)
๐๊ทธ๋ํ๋ฅผ ํํํ๋ 2๊ฐ์ง ๋ฐฉ๋ฒ
๐์ธ์ ํ๋ ฌ ( Adjacency Matrix )
: 2์ฐจ์ ๋ฐฐ์ด๋ก ๊ทธ๋ํ์ ์ฐ๊ฒฐ ๊ด๊ณ๋ฅผ ํํํ๋ ๋ฐฉ์
: ๋ฉ๋ชจ๋ฆฌ๊ฐ ๋ถํ์ํ๊ฒ ๋ญ๋น๋จ
: ์ ๋ณด๋ฅผ ์ป๋ ์๋๊ฐ ๋น ๋ฅด๋ค
๐์ธ์ ๋ฆฌ์คํธ ( Adjacency List )
: ๋ฆฌ์คํธ๋ก ๊ทธ๋ํ์ ์ฐ๊ฒฐ ๊ด๊ณ๋ฅผ ํํํ๋ ๋ฐฉ์
: ๋ฉ๋ชจ๋ฆฌ๋ฅผ ํจ์จ์ ์ผ๋ก ์ฌ์ฉ ( ์ฐ๊ฒฐ๋ ์ ๋ณด๋ง์ ์ ์ฅ )
: ์ ๋ณด๋ฅผ ์ป๋ ์๋ ๋๋ฆผ ( ์ฐ๊ฒฐ๋ ๋ฐ์ดํฐ๋ฅผ ํ๋์ฉ ํ์ธํด์ผํ๊ธฐ ๋๋ฌธ )
==> ํ์ด์ฌ์์๋ ๋จ์ํ 2์ฐจ์ ๋ฆฌ์คํธ๋ฅผ ์ด์ฉํ๋ฉด ๋๋ค!
ํ์ด์ฌ์ ๊ธฐ๋ณธ ์๋ฃํ์ธ ๋ฆฌ์คํธ ์๋ฃํ์ด append()์ ๋ฉ์๋๋ฅผ ์ ๊ณตํ๊ธฐ ๋๋ฌธ