백준_BFS_촌수계산_2644_파이썬

석준·2022년 8월 31일
0

백준_문제풀이

목록 보기
24/30
post-thumbnail

✅문제 요약

  1. 가족들이 번호로 나타남 1번부터 n번
  2. 번호 별 연결된 가족은 친척관계
  3. 두 사람의 번호가 주어질 때 친척관계이면 촌수 출력 아니라면 -1 출력

✅문제 풀이

그래프 이론으로 생각하자
보기좋게 가족을 번호로 매겨줬으니 주어진 번호에서 Q를 시작하여 이어진 친척관계를 다니며
방문한 곳에 현재 촌수+1을 해주고 도달했으면 촌수를 출력!

from collections import deque
import sys
input = sys.stdin.readline

n = int(input())						# 가족번호
s, e = map(int, input().split())		# 시작노드와 끝노드
m = int(input())						# 가족관계의 수
graph = [[] for _ in range(n+1)]		# 가족 그래프

for _ in range(m):
    a, b = map(int, input().split())
    graph[a].append(b)
    graph[b].append(a)

# 시작 기점으로 Q 시작
Q = deque([s])
visit = [0]*(n+1)
# 방문처리를 위해 시작노드를 1로 처리. 출력시 -1해서 한다
visit[s] = 1

while Q:
    now = Q.popleft()
	
    # e에 도달하면 현재 촌수-1해서 출력후 종료
    if now == e:
        print(visit[now]-1)
        exit()

    for i in graph[now]:
        if visit[i]==0:
            visit[i] = visit[now]+1
            Q.append(i)

print(-1)
profile
파이썬 서버 개발자 지망생

0개의 댓글