알고리즘 문제 해결/BOJ

[다익스트라] BOJ 5972 택배 배송 (C++)

jmkimmessi 2022. 6. 23. 20:36
반응형

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

 

5972번: 택배 배송

농부 현서는 농부 찬홍이에게 택배를 배달해줘야 합니다. 그리고 지금, 갈 준비를 하고 있습니다. 평화롭게 가려면 가는 길에 만나는 모든 소들에게 맛있는 여물을 줘야 합니다. 물론 현서는

www.acmicpc.net

문제 해결 알고리즘

 

전형적인 다익스트라 문제이다.

 

아래 링크에 다익스트라 알고리즘에 대한 설명이 나와있다.

 

https://kimmessi.tistory.com/185?category=871925 

 

[알고리즘] 다익스트라 - 선형 탐색, 우선순위 큐

다익스트라 알고리즘 (Dijkstra's algorithm) 특정 노드에서 출발해 다른 모든 노드로 가는 최단 경로를 구해주는 알고리즘 다익스트라 알고리즘은 음의 간선이 있는 그래프에서는 사용이 불가능하

kimmessi.tistory.com

 

소스 코드

 

#include <bits/stdc++.h>
using namespace std;

const int INF = 1e8;
int N, M;

int d[50002];
vector<pair<int, int>> graph[50002];

void dijkstra(){

    priority_queue<pair<int, int>> pq;

    d[1] = 0;
    pq.push({0, 1});

    while(!pq.empty()){
        
        int dist = -pq.top().first;
        int now = pq.top().second;

        pq.pop();

        if(d[now] < dist) continue;

        for(int i=0;i<graph[now].size();i++){
            int cost = dist + graph[now][i].first;

            if(cost < d[graph[now][i].second]){
                pq.push({-cost, graph[now][i].second});
                d[graph[now][i].second] = cost;
            }
        }
    }
}

int main(){
    ios::sync_with_stdio(false);
	cin.tie(NULL);
    cin >> N >> M;

    for(int i=0;i<M;i++){
        int A_i, B_i, C_i;
        cin >> A_i >> B_i >> C_i;

        graph[A_i].push_back({C_i, B_i});
        graph[B_i].push_back({C_i, A_i});
    }

    fill(d, d+50001, INF);

    dijkstra();

    cout << d[N];
}
반응형