๐ญ ํ์ด ๊ณผ์
ํ์ ๋ฌธ์ ๋ก์ BFS์ DFS ๋ ๊ฐ์ง ๋ฐฉ๋ฒ ๋ชจ๋ ๊ฐ๋ฅํ ๋ฌธ์ ์ด๋ค.
์ ๋ ฅ์ผ๋ก ์ฃผ์ด์ง ์ฐ๊ฒฐ ๊ด๊ณ๋ฅผ 2์ฐจ์ ๋ฆฌ์คํธ๋ก ์ ์ชฝ ๋ชจ๋์ ์ ์ฅํ๋ค.
visited ๋ฆฌ์คํธ์๋ ์ถ๋ฐ์ ์์ ํด๋น ๋ฒํธ์ ๋ ธ๋๊น์ง ์ด๋ํ๋ ๊ฑฐ๋ฆฌ(์ด์)๋ฅผ ์ ์ฅํ๋ค.
visited์ ๋์ฐฉ์ ์์น ๊ฐ์ด 0์ด๋ฉด ๊ฐ์กฑ ๊ด๊ณ๊ฐ ์ ํ ์๋ค๋ ๋ป์ด๋ฏ๋ก -1์ ์ถ๋ ฅํ๊ณ ,
๊ฐ์ด ์กด์ฌํ๋ค๋ฉด ๊ทธ ์ด ์๋ฅผ ์ถ๋ ฅํ๋ค.
์์ฑ์ธ์ด: Python
BFS
from sys import stdin
from collections import deque
n = int(stdin.readline().rstrip())
man1, man2 = map(int, stdin.readline().rstrip().split())
m = int(stdin.readline().rstrip())
family_tree = [[] for _ in range(n+1)] # ๊ฐ์กฑ ๊ด๊ณ
visited = [0]*(n+1) # ๋ฐฉ๋ฌธ ์ฒ๋ฆฌ
queue = deque()
# ๊ฐ์กฑ ๊ด๊ณ ์ ๋ณด ์
๋ ฅ
for _ in range(m):
x, y = map(int, stdin.readline().rstrip().split())
family_tree[x].append(y)
family_tree[y].append(x)
# BFS ์ํ
queue.append(man1)
while queue:
now = queue.popleft()
for man in family_tree[now]:
# ์์ง ํ์ํ์ง ์์ ๋
ธ๋์ด๋ฉด์, ์์๋
ธ๋๊ฐ ์๋๋ฉด ํ์ ์ฝ์
if man != man1 and visited[man] == 0:
# ์ด์ 1 ์ฆ๊ฐ
visited[man] = visited[now] + 1
queue.append(man)
# ํ์ ํ์๋ ์ฌ์ ํ 0์ด๋ผ๋ฉด ์น์ฒ ๊ด๊ณ๊ฐ ์ ํ ์๋ค๋ ๊ฒ(์ฐ๊ฒฐ๋์ด์์ง ์์)
if visited[man2] == 0:
print(-1)
else:
print(visited[man2])
DFS
from sys import stdin
n = int(stdin.readline().rstrip())
man1, man2 = map(int, stdin.readline().rstrip().split())
m = int(stdin.readline().rstrip())
family_tree = [[] for _ in range(n+1)] # ๊ฐ์กฑ ๊ด๊ณ
visited = [0]*(n+1) # ๋ฐฉ๋ฌธ ์ฒ๋ฆฌ
# ๊ฐ์กฑ ๊ด๊ณ ์ ๋ณด ์
๋ ฅ
for _ in range(m):
x, y = map(int, stdin.readline().rstrip().split())
family_tree[x].append(y)
family_tree[y].append(x)
# DFS ์ํ
def dfs(before):
global family_tree, visited, man1
for man in family_tree[before]:
if man != man1 and visited[man] == 0:
visited[man] = visited[before] + 1
dfs(man)
dfs(man1)
# ํ์ ํ์๋ ์ฌ์ ํ 0์ด๋ผ๋ฉด ์น์ฒ ๊ด๊ณ๊ฐ ์ ํ ์๋ค๋ ๊ฒ(์ฐ๊ฒฐ๋์ด์์ง ์์)
if visited[man2] == 0:
print(-1)
else:
print(visited[man2])
'Problem_Solving' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[BOJ] ๋ฐฑ์ค 1697 ์จ๋ฐ๊ผญ์ง / BFS (0) | 2021.01.07 |
---|---|
[BOJ] ๋ฐฑ์ค 7569 ํ ๋งํ / BFS (0) | 2021.01.05 |
[BOJ] ๋ฐฑ์ค 2667 ๋จ์ง๋ฒํธ๋ถ์ด๊ธฐ / BFS, DFS (0) | 2021.01.04 |
[BOJ] ๋ฐฑ์ค 2887 ํ์ฑ ํฐ๋ / ์ต์ ์ ์ฅ ํธ๋ฆฌ(MST), ํฌ๋ฃจ์ค์นผ (0) | 2020.11.21 |
[ํ๋ก๊ทธ๋๋จธ์ค] ๊ฐ์ฅ ๋จผ ๋ ธ๋ / ์ต๋จ ๊ฒฝ๋ก, ๋ค์ต์คํธ๋ผ (0) | 2020.11.21 |