티스토리 뷰

728x90

문제

https://www.acmicpc.net/problem/14496

 

14496번: 그대, 그머가 되어

첫째 줄에 머호가 바꾸려 하는 문자 a와 b가 주어진다. 둘째 줄에 전체 문자의 수 N과 치환 가능한 문자쌍의 수 M이 주어진다. (1 <= N <= 1,000, 1 <= M <= 10,000) 이후 M개의 줄에 걸쳐 치환 가능한 문자쌍

www.acmicpc.net

 

풀이 및 소스코드

import sys,heapq
input = sys.stdin.readline

INF = int(1e9)
a, b = map(int, input().split())
n, m = map(int, input().split())
arr = [[] for _ in range(n+1)]
for _ in range(m):
    x, y = map(int, input().split())
    arr[x].append(y)
    arr[y].append(x)

dist = [INF]*(n+1)
dist[a] = 0
q = []
heapq.heappush(q, (0, a))

while q:
    d, c = heapq.heappop(q)
    if(dist[c]<d):
        continue

    for next in arr[c]:
        if dist[next] > d+1:#현재 온 가중치보다 저장되어있는게 크다면 현재 가중치 넣어줌
            dist[next] = d+1
            heapq.heappush(q, (d+1, next))

if dist[b] == INF:
    print(-1)
else:
    print(dist[b])
반응형