일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 삼성 코딩테스트
- 백트레킹
- 성화봉송
- 평창동계올림픽
- 영어회화 100일의 기적
- boj
- 언어의 온도
- 인간이 그리는 무늬
- BOJ 2098
- 다음 API
- 비트마스크
- multiset
- DP
- 캘리그라피
- 창훈쓰다
- 그리디 알고리즘
- 다음 지도 api
- 안드로이드 스튜디오
- Segment Tree
- 외판원 순회
- lower_bound
- MST
- yolo
- 성화봉송주자
- BFS
- upper_bound
- 이분탐색
- 생활코딩
- 다이나믹 프로그래밍
- 위상정렬
- Today
- Total
목록다익스트라 (2)
Hoon222y
https://www.acmicpc.net/problem/1854 k번째 최단경로를 찾는 문제이다. 보통 최단경로 문제를 풀게되면 다익스트라를 이용해서 접근하는 것처럼 이 문제 또한 다익스트라를 기반으로 한다. 하지만 그냥 다익스트라와 조금 차이가 있다면 dist배열을 그냥 dist[i] = 시작점에서 i 번 점으로 갈 때 걸리는 최단거리로 정의하는 것이 아니라 dist를 queue+배열로 정의하여 dist[i][j]는 i번 지점으로 갈 때 j번째 최단거리라고 정의를 하고 문제를 접근하게 된다. (17번째 줄) 즉 포인트는1) 다익스트라 배열을 항상 k개의 최단경로를 저장하게 만든다. 2) 저장된 경로가 k번보다 작을떄는 최단경로를 그냥 push해주고 3) 저장된 경로가 k번보다 크거나 같을때는 가장 큰..
이번 시간에는 최단거리 알고리즘인 다익스트라(Dijkstra)에 대해 알아보자. 다익스트라 알고리즘의 경우에는 크게 3개의 과정으로 나뉘게 된다. 1) 체크되어 있지 않은 정점 중에서 dist의 값이 가장 작은 정점x를 선택한다.2) x를 체크한다.3) x와 연결된 모든 정점을 검사하며 간선을 (x,y,z)라고 했을 때 dist[y]>dist[x]+z 이면 갱신한다. 그런데 보통 1번과정에서 가장 dist값이 작은 경우를 찾는 과정을 효율적으로 구현하기 위해 priority_queue를 사용한다.- priority_queue 자체가 max heap이기 때문에 -1을 곱해서 음수로 체크를 한다. 123456789101112131415161718192021222324for(int i=1;i