๐ค๋ฌธ์ ์ดํด
์์์ ์์ ๊ฐ ์ ์ ์ ๋ฐฉ๋ฌธํ๊ธฐ ์ํด ํ์ํ ์ต์ ๋น์ฉ์ ๊ตฌํ๋ ๋ฌธ์ ์ด๋ค.
๐ก์ฒซ๋ฒ์งธ ์์ด๋์ด
๋ฌธ์ ๊ฐ ๊ทธ๋ฅ ๋ฑ ๋ค์ต์คํธ๋ผ ๋ฌธ์ ๋ผ ๋ค์ต์คํธ๋ผ๋ฅผ ์ด์ฉํ๋ค.
๐ฅํ์ด๐ฅ
๋ค์ต์คํธ๋ผ๋ฅผ ๊ทธ๋๋ก ๊ตฌํํ์๊ณ , ๋ค์ ์ ์ ๊น์ง์ ๊ฑฐ๋ฆฌ๋ฅผ ์ฐ์ ์์ํ์ ๋ฃ์ด์ฃผ๊ธฐ ์ ์ ์ด๋ฏธ ๊ทธ ์ ์ ๊น์ง ์ต์๊ฑฐ๋ฆฌ๋ณด๋ค ํฌ๋ฉด ํ์ ๋ฃ์ด์ฃผ์ง ์๊ณ continue๋ฅผ ํด์ฃผ์๋ค. ๊ทธ๋ฆฌ๊ณ ์ฐ์ ์์ํ์ ๋ค์ด์๋ ์ ์ ์ด ์ด๋ฏธ ์ต์๊ฑฐ๋ฆฌ๊ฐ ํ์ ๋์๋ค๋ฉด ๊ทธ ๋์๋ continue๋ฅผ ํด์ค์ ๋ถํ์ํ ์ฐ์ฐ์ ์ค์ฌ์ฃผ์๋ค.
์๋๋ ์ ์ถํ ์ฝ๋์ด๋ค.
#include <iostream>
#include <queue>
using namespace std;
#define INF 100000000
int dist[20002], v, e, k;
int main() {
cin.tie(nullptr);
cout.tie(nullptr);
ios::sync_with_stdio(false);
cin >> v >> e >> k;
vector<vector<pair<int, int>>> edge(v+1);
int a, b, c;
for (int i = 0; i < e; i++) {
cin >> a >> b >> c;
edge[a].push_back({b, c});
}
for (int i = 1; i <= v; i++) {
dist[i] = INF;
}
dist[k] = 0;
priority_queue<pair<int, int>> pq;
pq.push({0, k});
while (!pq.empty()) {
int weight = -pq.top().first;
int vertex = pq.top().second;
pq.pop();
if (weight > dist[vertex])
continue;
for (auto u: edge[vertex]) {
int n = u.first;
int w = u.second + weight;
if (dist[n] <= w) continue;
pq.push({-w, n});
dist[n] = w;
}
}
for (int i = 1; i <= v; i++) {
if (dist[i] == INF) cout << "INF\n";
else cout << dist[i] << "\n";
}
}
728x90
'๋ฐฑ์ค > C++' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[๋ฐฑ์ค/C++] 1005๋ฒ ACM Craft (0) | 2022.07.16 |
---|---|
[๋ฐฑ์ค/C++] 2098๋ฒ ์ธํ์ ์ํ (0) | 2022.07.16 |
[๋ฐฑ์ค/C++] 14888๋ฒ ์ฐ์ฐ์ ๋ผ์๋ฃ๊ธฐ (0) | 2022.07.13 |
[๋ฐฑ์ค/C++] 1790๋ฒ ์ ์ด์ด ์ฐ๊ธฐ 2 (0) | 2022.07.11 |
[๋ฐฑ์ค/C++] 16936๋ฒ ๋3๊ณฑ2 (0) | 2022.07.10 |