백준 문제 링크
그대, 그머가 되어
- BFS를 사용했다.
- 방문 처리할 변수인 visited와 치환 횟수를 저장할 answer를 만들었다.
- 자식 노드에 처음 방문하면 방문 처리한 후
자식 노드의 횟수 (answer[i]) = 부모 노드의 횟수 (answer[v]) + 1 queue에 자식 노드를 넣어준다.- bfs(A)를 실행시키고, 조건은 다음과 같다
- A == B인 경우 0을 출력
- A != B인 경우
- answer[B] == 0 이면 -1을 출력
- answer[B] != 0이면 answer[B]를 출력
from collections import deque
A,B = map(int, input().split())
N,M = map(int, input().split())
graph = [[] for _ in range(N+1)]
for _ in range(M):
x, y = map(int, input().split())
graph[x].append(y)
graph[y].append(x)
visited = [False] * (N+1)
answer = [0] * (N+1)
def bfs(x):
queue = deque()
queue.append(x)
visited[x] = True
while queue:
v = queue.popleft()
for i in graph[v]:
if not visited[i]:
visited[i] = True
answer[i] = answer[v] + 1
queue.append(i)
bfs(A)
if A == B:
print(0)
else:
if answer[B] == 0:
print(-1)
else:
print(answer[B])