Algorithm/다익스트라 알고리즘 (Dijkstra's Algorithm)
[BOJ] 1753 최단 경로
노는게제일좋아!
2021. 1. 4. 00:24
반응형
문제: www.acmicpc.net/problem/1753
소스 코드:
#include <iostream>
#include <vector>
#include <algorithm>
#include <string>
#include <string.h>
#include <queue>
#define inf 1000000000
using namespace std;
typedef pair<int, int> PI;
int vertex, edge, start;
int dist[20002];
bool visit[20002];
vector<vector<PI>> adj;
void dijkstra()
{
fill(dist, dist + vertex + 1, inf);
priority_queue<PI, vector<PI>, greater<PI>> pq;
dist[start] = 0;
pq.push({0, start});
while (!pq.empty())
{
int cur;
do
{
cur = pq.top().second;
pq.pop();
} while (!pq.empty() && visit[cur]);
if (visit[cur])
break;
visit[cur] = true;
for (PI next : adj[cur])
{
if (dist[next.first] > dist[cur] + next.second)
{
dist[next.first] = dist[cur] + next.second;
pq.push({dist[next.first], next.first});
}
}
}
}
int main()
{
ios::sync_with_stdio(false);
cin.tie(NULL);
cout.tie(NULL);
cin >> vertex >> edge >> start;
adj.resize(vertex + 1);
for (int i = 0; i < edge; i++)
{
int u, v, w;
cin >> u >> v >> w;
adj[u].push_back({v, w});
}
dijkstra();
for (int i = 1; i <= vertex; i++)
{
if (dist[i] == inf) cout << "INF\n";
else
cout << dist[i] << '\n';
}
return 0;
}
반응형