출처 : https://www.acmicpc.net/problem/5972
풀이 방법
평범한 다익스트라로 풀이 했다.
#include <iostream>
#include <vector>
#include <queue>
#include <memory.h>
using namespace std;
int n, m;
vector<vector<pair<int, int> > > graph;
int visited[50001];
int cost[50001];
const int INF = 987654321;
struct Node {
int idx;
int distance;
Node (int idx, int distance): idx(idx), distance(distance) {}
bool operator < (const Node &n) const{
if (distance > n.distance) return true;
else return false;
}
};
void dijkstra(int start) { // 시작 점에서 모든 정점에 이르는 거리 구하기
priority_queue<Node> pq;
pq.push(Node(start, 0)); // 자기 자신 추가하기
while(!pq.empty()) {
Node now = pq.top();
visited[now.idx] = 1;
pq.pop();
for (int i = 0;i < graph[now.idx].size();i++) { // 이웃 탐색
if (visited[graph[now.idx][i].first] == 1) continue;
if (cost[graph[now.idx][i].first] > now.distance + graph[now.idx][i].second) {
cost[graph[now.idx][i].first] = now.distance + graph[now.idx][i].second;
pq.push(Node(graph[now.idx][i].first, cost[graph[now.idx][i].first]));
}
}
}
}
int main() {
cin >> n >> m;
graph.resize(n+1);
memset(visited, 0, sizeof(visited));
int a, b, c;
for (int i = 0;i < m;i++) {
cin >> a >> b >> c;
graph[a].push_back(make_pair(b, c));
graph[b].push_back(make_pair(a, c));
}
for (int i = 1;i <= n; i++) {
cost[i] = INF;
}
dijkstra(1);
cout << cost[n];
return 0;
}
'Algorithm' 카테고리의 다른 글
[백준] 하늘에서 별똥별이 빗발친다. (C++) (0) | 2025.01.15 |
---|---|
[백준] 탑 보기 22866번 (c++) 스택을 활용한 증가 수열 만들기 (0) | 2025.01.14 |
[프로그래머스] 순위 검색 (C++) Map을 이용한 배열화, low_bound (0) | 2025.01.14 |
[백준] 회전 초밥 2531번 (c++) (0) | 2025.01.13 |
[프로그래머스] 메뉴 리뉴얼 (c++) map, 조합 (0) | 2025.01.12 |