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()
'Algorithm > Baekjoon' 카테고리의 다른 글
[Python] 2098. 외판원 순회 1 (0) | 2022.01.15 |
---|---|
[Python] 10971. 외판원 순회 2 (0) | 2022.01.15 |
[Python] 20309. 트리플 소트 (0) | 2022.01.14 |
[Python] 소가 길을 건너간 이유 5 (0) | 2022.01.14 |
[Python] 4485. 녹색 옷 입은 애가 젤다지 ? (0) | 2022.01.14 |