반응형
<코드>
#include<iostream>
#include<algorithm>
#include<queue>
#include<vector>
#include<stack>
using namespace std;
#define INF 1000000000
int n, m, s, e, a, b, c;
int Dijkstra[1001];
int route[1001];
vector<pair<int,int>> map[1001];
queue<int> q;
stack<int> ans;
int main()
{
ios::sync_with_stdio(0);
cin.tie(0);
cin >> n;
cin >> m;
for (int i = 0; i < m; i++)
{
cin >> a >> b >> c;
map[a].push_back({ b,c });
}
for (int i = 1; i <= n; i++)
Dijkstra[i] = INF;
cin >> s >> e;
Dijkstra[s] = 0;
q.push(s);
while (!q.empty())
{
int now_node = q.front();
int now_cost = Dijkstra[now_node];
q.pop();
for (int i = 0; i < map[now_node].size(); i++)
{
int next_node = map[now_node][i].first;
int next_cost = map[now_node][i].second;
if (Dijkstra[next_node] > now_cost + next_cost)
{
Dijkstra[next_node] = now_cost + next_cost;
q.push(next_node);
route[next_node] = now_node;
}
}
}
cout << Dijkstra[e] << '\n';
int u = e;
while (true)
{
ans.push(u);
if (u == s) break;
u = route[u];
}
cout << ans.size() << '\n';
while (!ans.empty())
{
cout << ans.top() << " ";
ans.pop();
}
}
풀이 방법
기본적인 다익스트라 문제이지만
경로가 갱신될 때 마다 route배열로 이전 노드를 저장하여 최단거리 경로를 나타낼 수 있다.
반응형
'🧩PS > 🥈Nomal' 카테고리의 다른 글
[C/C++] 백준 11780번 - 플로이드 2 (플로이드 와샬) (0) | 2021.03.11 |
---|---|
[C/C++] 백준 13913번 - 숨바꼭질 4 (BFS) (0) | 2021.03.10 |
[C/C++] 백준 17071번 - 숨바꼭질 5 (BFS) (0) | 2021.03.09 |
[C/C++] 백준 9019번 - DSLR (0) | 2021.03.09 |
[C/C++] 백준 13549번 - 숨바꼭질 3 (BFS) (0) | 2021.03.09 |