https://www.acmicpc.net/problem/2644
from collections import deque
import sys
input = sys.stdin.readline
n = int(input().strip())
x, y = map(int, input().split())
m = int(input().strip())
graph = [[] for _ in range(n+1)]
for _ in range(m):
parent, child = map(int, input().split())
# 양방향 그래프로 설정해준다
graph[parent].append(child)
graph[child].append(parent)
# distance[v] = v까지의 거리
# -1 = 방문하지 않음
distance = [-1]*(n+1)
def bfs(node):
# node와 연결된 모든 노드들의 거리를 구한다
q = deque([])
q.append(node)
distance[node] = 0
while q:
node = q.popleft()
for new_node in graph[node]:
# 방문하지 않았다면
if distance[new_node] == -1:
q.append(new_node)
# 이전 노드까지의 거리 + 1
distance[new_node] = distance[node]+1
# 촌수를 계산하고자 하는 사람 x와 연결된 다른 노드들의 거리를 구한다
# 결과로 얻어진 distance[y]를 출력하면 x와 y의 거리를 알 수 있다
bfs(x)
print(distance[y])
node
와 연결된 모든 노드들간의 최소 거리를 구한다.distance
에 저장해준다.distance[new_node] = distance[node] + 1
dfs(node)
실행을 마친 후 갱신된 리스트 distance의 distance[some_node]
는 node에서 some_node로의 촌수(최소 거리)를 나타낸다.distance[some_node] = -1