Deff_Dev
[백준] 1916번 최소비용 구하기 (C++) 본문
문제
https://www.acmicpc.net/problem/1916
풀이
이 문제는 시작 지점에서 도착지점까지의 최소비용 구하는 문제로, 다익스트라, 우선순위 큐를 이용하여 풀이했다.
우선순위 큐는 가중치가 낮은 노드 먼저 탐색(그리디)하여 최소 거리를 효율적으로 찾기 위해 사용했다.
#include<iostream>
#include<vector>
#include<queue>
// https://www.acmicpc.net/problem/1916
#define INF 1e9
using namespace std;
int N, M, startPos, endPos;
vector <pair<int, int>> vec[1001];
void Dijk() {
vector<int> dist(N + 1, INF);
priority_queue<pair<int, int>, vector<pair<int, int>>, greater<pair<int, int>>> pq;
dist[startPos] = 0;
pq.push({ 0, startPos });
while (!pq.empty()) {
int curWei = pq.top().first;
int curPos = pq.top().second;
pq.pop();
if (dist[curPos] < curWei)
continue;
for (int i = 0; i < vec[curPos].size(); i++) {
int wei = vec[curPos][i].second + curWei;
int nextPos = vec[curPos][i].first;
if (dist[nextPos] > wei) {
dist[nextPos] = wei;
pq.push({ wei , nextPos });
}
}
}
cout << dist[endPos] << endl;
}
int main() {
ios_base::sync_with_stdio(0);
cin.tie(0);
cin >> N >> M;
for (int i = 0; i < M; i++) {
int s1, s2, s3;
cin >> s1 >> s2 >> s3;
vec[s1].push_back({ s2 , s3 });
}
cin >> startPos >> endPos;
Dijk();
return 0;
}
'코딩테스트 > 백준' 카테고리의 다른 글
[백준] 1058번 친구 (C++) (0) | 2024.09.02 |
---|---|
[백준] 11724번 연결 요소의 개수 (C++) (0) | 2024.08.31 |
[백준] 15954번 N과 M (5) (C++) (0) | 2024.08.30 |
[백준] 11723번 집합 (C++) (0) | 2024.08.30 |
[백준] 15686번 치킨 배달 (C++) (0) | 2024.08.29 |