inseonyun / Algorithm

알고리즘 문제 풀이
0 stars 0 forks source link

[Dijkstra] 백준 : 1753_최단경로 #23

Closed inseonyun closed 2 years ago

inseonyun commented 2 years ago

Source URL : https://www.acmicpc.net/problem/1753

inseonyun commented 2 years ago

문제 요구사항

접근 방법

풀이 순서

  1. 문제에서 주어지는 정점, 간선의 개수, 시작점을 입력 받는다.
  2. 간선 정보를 vec 변수에 입력 받는다.
    • vec는 [정점 번호] [ pair<간선 목적지, 가중치> ] 로 구성된다.
  3. 우선 순위 큐를 선언하여 시작점의 가중치는 0으로 설정하고, 우선 순위 큐가 빌 때까지 while문을 반복한다.
    • 큐의 top().first는 현재 정점 위치까지의 비용이다.
    • 큐의 top().second는 현재 정점의 위치이다.
    • 해당 top().second 정점에 있는 간선들의 개수만큼 for문을 반복한다.
      • next는 간선 정보 vec에 [top().second][i].first의 값으로 해당 간선의 목적지 정점 값이다.
      • next_cost는 간선 정보 vec에 [top().second][i].second의 값으로 해당 간선의 가중치 값이다.
      • dist[간선 목적지 정점] 값이 현재 정점까지의 비용 + 해당 간선의 가중치보다 크면 값을 갱신해준다.
      • 우선 순위 큐에 dist[next] 값에 음수를 취하여 넣어준다. pq.push( { -dist[next], next } )
  4. 이와 같은 작업 반복
  5. 정점의 개수만큼 for문을 반복하여 각 정점까지의 최단 경로를 출력한다. 이때, 최단 경로가 아니라면 INF를 출력한다.
inseonyun commented 2 years ago

[다익스트라 알고리즘 구현 관련 질문 사항] https://github.com/hs-study-group/algorithm/issues/37#issuecomment-1145971096

inseonyun commented 2 years ago

[문제 풀이 결과] image