๊ทธ๋ํ ์๊ณ ๋ฆฌ์ฆ์ผ๋ก, ๊ฒฝ๋ก๋ฅผ ์ฐพ๋ ๋ฌธ์ ์์ ์์ฃผ ์ฌ์ฉ๋ฉ๋๋ค.
Root Node ํน์ ๋ค๋ฅธ ์์์ Node์์ ๋ค์ ๋ถ๊ธฐ(Branch)๋ก ๋์ด๊ฐ๊ธฐ ์ ์ ํด๋น Branch๋ฅผ ์๋ฒฝํ๊ฒ ํ์ํ๋ ๋ฐฉ๋ฒ์ ๋๋ค.
Stack
๋๋Deque
,์ฌ๊ทํจ์
๋ฅผ ์ด์ฉํ์ฌ ๊ตฌํํฉ๋๋ค.- ๊ฒฝ๋ก๋ฅผ ํ์ํ ๋ ํ ๋ฐฉํฅ์ผ๋ก ๊ฐ ์ ์์ ๋๊น์ง ๊ณ์ ๊ฐ๋ค๊ฐ ๋ ์ด์ ๊ฐ ์ ์๊ฒ๋๋ฉด ๋ค๋ฅธ ๋ฐฉํฅ์ผ๋ก ๋ค์ ํ์์ ์งํํฉ๋๋ค.
- ๋ชจ๋ ๋ ธ๋๋ฅผ ๋ฐฉ๋ฌธํ๋ ๊ฒฝ์ฐ์ ์ด ๋ฐฉ๋ฒ์ ์ฌ์ฉํฉ๋๋ค.
- ์ธ์ ๋ฆฌ์คํธ : O(V + E)
- ์ธ์ ํ๋ ฌ : O(V^2)
์ ์ (V), ๊ฐ์ (E)
๋ฃจํธ๋ ธ๋ ๋๋ ๋ค๋ฅธ ์์์ ๋ ธ๋์์ ์ธ์ ํ ๋ ธ๋๋ฅผ ๋จผ์ ํ์ํ๋ ๋ฐฉ๋ฒ์ ๋๋ค.
Queue
๋๋Deque
๋ฅผ ์ด์ฉํ์ฌ ๊ตฌํํฉ๋๋ค.- ๋ชจ๋ ๋ ธ๋๋ฅผ ๋ฐฉ๋ฌธํ๋ ๊ฒฝ์ฐ๋ณด๋ค๋ ์ฃผ๋ก ๋ ๋ ธ๋ ์ฌ์ด์ ์ต๋จ ๊ฒฝ๋ก๋ฅผ ์ฐพ๊ณ ์ถ์ ๋ ์ด ๋ฐฉ๋ฒ์ ์ ํํฉ๋๋ค.
- ์ธ์ ๋ฆฌ์คํธ : O(V + E)
- ์ธ์ ํ๋ ฌ : O(V^2)
์ ์ (V), ๊ฐ์ (E)
๋ฌธ์
ํ์ด
1๋ฒ ์ปดํจํฐ์ ์ฐ๊ฒฐ๋ ์ปดํจํฐ๋ค์ ์ฐพ๋ ์ฐ๊ฒฐ ์์ ์ฐพ๊ธฐ ๋ฌธ์
์
๋๋ค.
๊ทธ๊ฒ์ ์ธ์ก์ ํ๋์ ์ฐ๊ฒฐ ์์๋ผ๊ณ ํฉ๋๋ค. DFS์ BFS ๋ ๋ค๋ก ํ ์ ์๋ ์ ๋นํ ๋์ด๋์ ๋ฌธ์ ๋ก, ๊ทธ๋ํ ํ์ ์ฐ์ตํ๊ธฐ ์ข์ ๋ฌธ์ ์
๋๋ค.
- DFS - ์ฌ๊ทํจ์
- BFS - Deque
read = sys.stdin.readline
def dfs(start, dic):
visited.append(start)
for i in dic[start]:
if i not in visited:
dfs(i, dic)
return len(visited) - 1
dic = {}
visited = []
for i in range(int(read())):
dic[i + 1] = set()
for _ in range(int(read())):
a, b = map(int, read().split())
dic[a].add(b)
dic[b].add(a)
print(dfs(1,dic))
from collections import deque
import sys
read = sys.stdin.readline
def bfs(start, dic):
q = deque()
q.append(start)
while q:
start = q.popleft()
for i in dic[start]:
if i not in visited:
visited.append(i)
q.append(i)
return len(visited) - 1
dic = {}
visited = []
for i in range(int(read())):
dic[i + 1] = set()
for _ in range(int(read())):
a, b = map(int, read().split())
dic[a].add(b)
dic[b].add(a)
print(bfs(1, dic))