Algorithm/Baekjoon

[Python] 14496. 그대, 그머가 되어

느낌표 공장장 2022. 1. 14. 17:56
import heapq

def dijkstra():
    dist = [float('inf') for _ in range(n+1)]   # 가중치 초기화
    queue = [[0, a]]    # 횟수, 시작 문자 넣기
    dist[a] = 0     # 시작지점 가중치 0
    while queue:
        d, now = heapq.heappop(queue)   # 현재까지 치환 횟수, 현재 문자 뽑기

        if now == b:    # 바꾸려고 하는 문자 b라면
            print(d)    # 현재까지 치환 횟수 출력
            return

        if dist[now] < d:   # 저장한 치환횟수보다 꺼낸게 더 크다면 패스
            continue

        for next in visited[now]:   # 현재 문자에서 바꿀 수 있는 문자로 가보기
            nd = d + 1  # 치환 횟수 + 1
            if nd < dist[next]: # 저장한 치환 횟수보다 적다면 갱신
                dist[next] = nd
                heapq.heappush(queue, [nd, next])   # 해당 문자로 가보기

    print(-1)   # 문자 b로 바꿀 수 없다면 -1 출력
    return


a, b = map(int, input().split())    # 바꾸려고 하는 문자 a, b
n, m = map(int, input().split())    # 전체 문자의 수 n, 치환 가능한 문자쌍의 수 m

visited = [[] for _ in range(n+1)]  # 인접 리스트 만들기
for _ in range(m):
    t1, t2 = map(int, input().split())  # 바꿀 수 있는 두 문자
    visited[t1].append(t2)  # 양방향 
    visited[t2].append(t1)

dijkstra()