일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
Tags
- Python
- 11053
- 11054
- 나머지
- expo
- 홈화면
- itertools
- 앱
- Combination
- 순열
- 안드로이드
- LCS
- 뒤로가기
- 11기
- 6603
- 코테
- permutation
- 백준
- 1182
- 코틀린
- 11057
- Kotlin
- lcm
- Android
- 최소공배수
- 괄호
- 매일11시
- 파이썬
- 1260
- 9095
Archives
- Today
- Total
황소개발자
백준 1753 파이썬 python : 최단경로 @@황소처럼 우직하게@@ 본문
반응형
다익스트라는
Greedy 와 BFS 를 섞은 느낌이다
BFS에서 대신 q를 쓸 때, min heap q를 사용한다.
그래야 다음으로 가장 짧은 노드를 빠르게 찾을 수 있으니.
import sys
import heapq
inpu = sys.stdin.readline
INF = 999999999
def dijkstra(v, start, g):
dist = [INF] * (V + 1)
dist[start] = 0
q = []
heapq.heappush(q, [0, start])
while q:
cost, loc = heapq.heappop(q)
for l, c in g[loc]:
c += cost
if c < dist[l]:
dist[l] = c
heapq.heappush(q, [c, l])
return dist[1:]
V, E = map(int, inpu().split())
K = int(inpu())
G = [[] for i in range(V + 1)]
for i in range(E):
u, v, w = map(int, inpu().split())
G[u].append([v, w])
for x in dijkstra(V, K, G):
print(x if x != INF else "INF")
기존 백준(DFS와 BFS) 와 다른점은
다음 노드를 찾을 때, 가장 짧은 거리 노드를 찾는 것이다. 뭐 일종의 bfs지 뭐..
가장 짧은 거리 노드를 빨리 찾기 위해 heapq 를 사용하는 것이다.
반응형
'백준 문제 풀이' 카테고리의 다른 글
백준 7568 파이썬 python : 덩치 @@황소처럼 우직하게@@ (0) | 2020.02.23 |
---|---|
백준 2231 파이썬 python : 분해합 @@황소처럼 우직하게@@ (0) | 2020.02.23 |
백준 6603 파이썬 python : 독일 로또 @@황소처럼 우직하게@@ 조합 itertools combinations permutation 사용법 + 런타임에러 해결 (0) | 2020.02.21 |
백준 11724 파이썬 python : 연결 요소의 개수 @@황소처럼 우직하게@@ 런타임에러 해결, 시간초과 해결 (0) | 2020.02.21 |
백준 1260 파이썬 python : DFS와 BFS @@황소처럼 우직하게@@ 탐색순서 주의안하면 시간초과납니다;; 최적화하기. (0) | 2020.02.20 |
Comments