※ 글쓴이는 취미로 코딩을 익혀보는 사람이라 정확하지 않은 내용을 담고 있을 수 있다 ※

 

이번에 볼 문제는 백준 5972번 문제인 택배 배송이다.
문제는 아래 링크를 확인하자.

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

 

5972번: 택배 배송

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

www.acmicpc.net

가중치가 주어진 그래프의 1번 노드에서 N번 노드까지의 최단거리를 구하는 문제이다.

 

이러한 작업은 dijkstra 알고리즘을 이용하여 수행할 수 있다.

 

아래는 제출한 소스코드이다.

#include <iostream>
#include <vector>
#include <queue>
using namespace std;

int N, M;
vector<pair<int, int>> G[50001]; // {도착점, 거리}
int dist[50001];

priority_queue<pair<int, int>> pq; // {-거리, 노드}

void dijkstra() {
	dist[1] = 1;
	pq.push(make_pair(-1, 1));
	while (!pq.empty()) {
		int cur = pq.top().second, d = -pq.top().first;
		pq.pop();
		if (dist[cur] < d) continue;
		for (auto p : G[cur]) {
			int node = p.first, dd = p.second;
			int& dnode = dist[node];
			if (0 < dnode && dnode <= d + dd) continue;
			dnode = d + dd;
			pq.push(make_pair(-(d + dd), node));
		}
	}
}

int main() {
	ios::sync_with_stdio(0);
	cin.tie(0);

	cin >> N >> M;
	while (M--) {
		int x, y, d; cin >> x >> y >> d;
		G[x].emplace_back(make_pair(y, d));
		G[y].emplace_back(make_pair(x, d));
	}

	dijkstra();

	cout << dist[N] - 1;
}
728x90

'BOJ' 카테고리의 다른 글

[BOJ 24805 // C++] Climbing Worm  (0) 2022.05.08
[BOJ 6504 // C++] 킬로미터를 마일로  (0) 2022.05.08
[BOJ 6031 // C++] Feeding Time  (0) 2022.05.08
[BOJ 1162 // C++] 도로포장  (0) 2022.05.07
[BOJ 2251 // C++] 물통  (0) 2022.05.06

+ Recent posts