728x90
🅰️문제주소 : https://www.acmicpc.net/problem/1753
🚩문제

🪡풀이
- 다익스트라 알고리즘을 사용한다
☕코드는 아래 숨김
더보기
#include <iostream>
#include <vector>
#include <queue>
#include <limits.h>
int main()
{
std::ios::sync_with_stdio(false);
std::cin.tie(0);
std::cout.tie(0);
int V = 0;
int E = 0;
int start = 0;
std::cin >> V >> E;
std::cin >> start;
typedef std::pair<int, int> edge;
std::vector<int> visited;
std::vector<int> min_distance;
std::vector<std::vector<edge>> map;
std::priority_queue<edge, std::vector<edge>, std::greater<edge>> q;
visited.resize(V+1);
min_distance.resize(V+1);
map.resize(V+1);
fill(min_distance.begin(), min_distance.end(), INT_MAX-1);
fill(visited.begin(), visited.end(), 0);
for (int i = 0; i < E; ++i)
{
int u, v, w;
std::cin >> u >> v >> w;
map[u].push_back(edge(v, w));
}
q.push(std::make_pair(0, start));
min_distance[start] = 0;
while (!q.empty())
{
edge current = q.top();
q.pop();
int c_v = current.second;
if (visited[c_v] == 1)
continue;
visited[c_v] = 1;
for (int i = 0; i < map[c_v].size(); ++i)
{
edge tmp = map[c_v][i];
int next = tmp.first;
int value = tmp.second;
if (min_distance[next] > min_distance[c_v] + value)
{
min_distance[next] = min_distance[c_v] + value;
q.push(std::make_pair(min_distance[next], next));
}
}
}
for (int i = 1; i <= V; ++i)
{
if (visited[i] == 0)
std::cout << "INF" << "\n";
else
std::cout << min_distance[i] << "\n";
}
return 0;
}
💡알게 된 것
- 간만에 다시 한 알고리즘 문제
- 다익스트라에 대해서 다시 리마인드 할 수 있었다.
- 큐에 넣어서 진행시키는걸 알고리즘 간만에 하느라 까먹었었다.. 우선순위 큐 (priority_queue)도 너무 간만이라 낯설었다.. 종종해야지 ㅠ
728x90
'운동하는 개발자 > 알고리즘, 코딩테스트' 카테고리의 다른 글
| Beakjoon] 플로이드(백준 11404 코테) - 그래프 (C++) (플로이드-워셜) (0) | 2025.10.23 |
|---|---|
| Beakjoon] 줄 세우기(백준 11657 코테) - 그래프 (C++) (벨만-포드) (0) | 2025.10.09 |
| Beakjoon] 줄 세우기(백준 2252코테) - 그래프 (C++) (0) | 2024.04.14 |
| Beakjoon] 여행 가자(백준 1976코테) - 그래프 (C++) (0) | 2024.02.19 |
| Beakjoon] 물통 (백준 2251코테) - 그래프 (C++) (0) | 2024.01.13 |