๋ฌธ์ :
๋ถ์ :
๋ํ์ ์ธ ๋ค์ต์คํธ๋ผ ์๊ณ ๋ฆฌ์ฆ ๋ฌธ์ ์ด๋ค.
๋ค์ต์คํธ๋ผ์ ๋ฐฉํฅ ๊ทธ๋ํ๋ฅผ ๊ตฌํํ๊ธฐ ์ํด์ ๋ฐฐ์ด ๋๋ ์ฐ์ ์์ ํ ์๋ฃ๊ตฌ์กฐ๋ฅผ ์ฌ์ฉํ๋ค.
๋ฐฐ์ด๋ก ์ฌ์ฉ ํ ์ ์์ ๋ ธ๋์ ๋๋๋ ๋ ธ๋์ ๊ฐ์ค์น๋ฅผ ๋ฃ๊ธฐ ์ํด
int v[in][to] = w ์ ๊ฐ์ด ์ฌ์ฉํด์ผ ํ๋๋ฐ
๋ฌธ์ ์ ๋ฐฐ์ด์ ๋ฒ์๊ฐ 20000์ด๋ผ ์๊ฐ ์ด๊ณผ๊ฐ ๋ ์ฌ์ฉ์ด ๋ถ๊ฐ๋ฅ ํ๋ค. ์ด๋ ๋ชจ๋ ๋ ธ๋๋ค์ ๋ํด for๋ฌธ์ ๋๋ฉด์ ๋ ๋ค์ for๋ฌธ์ ๋์ ์ต๋จ ๊ฑฐ๋ฆฌ๋ฅผ ์ฐพ์์ผ ํ๊ธฐ ๋๋ฌธ์ ์๊ฐ ๋ณต์ก๋๊ฐ O(V(vertex) ^2)์ ์๊ฐ์ด ๊ฑธ๋ฆฐ๋ค.
ํ์ง๋ง ์ฐ์ ์์ ํ๋ฅผ ์ด์ฉํ๋ค๋ฉด ๋ฐ๋ก pop ์ ๊ฑฐ๋ฆฌ๊ฐ ๊ฐ์ฅ ํฐ (์ฐ๋ฆฌ๊ฐ ์ํ๋ ๊ฒ์ ๊ฑฐ๋ฆฌ๊ฐ ๊ฐ์ฅ ์์ ๋ ธ๋์ด๋ฏ๋ก - ๋ถ์ฌ์ค๋ค)
๋ ธ๋๋ฅผ ๋ฐ๋ก ์ฐพ์์ฃผ๊ธฐ ๋๋ฌธ์ O(E(edge))์๊ฐ ๋งํผ๋ง ๊ฑธ๋ฆฐ๋ค๋ ๊ฑธ ์ ์ ์๋ค. (๋ชจ๋ edge๋ฅผ ํ๋ฒ์ฉ ๋๋ค ..!)
๊ทธ๋์ ๋ค๋ฅธ ๋ธ๋ก๊ทธ๋ค์ ๋์์ ๋ฐ์ ์ฐ์ ์์ ํ๋ฅผ ํ์ฉํด ๊ฑฐ๋ฆฌ๊ฐ ์์ ๋ ธ๋๋ถํฐ ๊บผ๋ด ์ต๋จ ๊ฑฐ๋ฆฌ๋ฅผ ๊ณ์ฐํด ์ฃผ์๋ค.
c++ ์ฝ๋ :
//
// 1753_min_path.cpp
// SOMA๐ฉ๐ป๐ป
//
// Created by JoSoJeong on 2021/03/09.
//
#include <stdio.h>
#include <iostream>
#include <vector>
#include <queue>
using namespace std;
#define INF 1e9
vector<pair<int, int>> vertex[100001];
int d[100001]; // ์ต๋จ ๊ฑฐ๋ฆฌ ํ
์ด๋ธ
void find_min_path(int start){
priority_queue<pair<int, int>>pq;
//๊ฑฐ๋ฆฌ, ๊น์ง ์ ์
pq.push(make_pair(0, start));
d[start] = 0;
while(!pq.empty()){
//์ฐ์ ์์ ํ๋ ๊ฐ์ฅ ํฐ ์์ top์ผ๋ก ๋์ผ๋ฏ๋ก
//๊ฑฐ๋ฆฌ ์์ ์ ์ ๋ถํฐ ๊บผ๋ด์ง๋๋ก ํ๊ธฐ
int dist = -pq.top().first;
int now = pq.top().second;
pq.pop();
for(int i = 0; i < vertex[now].size(); i++){
//๊ฑฐ์ณ์ ๊ฐ๋ ๋
ธ๋์ ๋น์ฉ์ ๊ณ์ฐ
int cost = dist + vertex[now][i].second;
if(cost <d[vertex[now][i].first]) // ๋น์ฉ์ด ๋ ์๋ค๋ฉด ์ต๋จ๊ฒฝ๋ก ํ
์ด๋ธ ๊ฐ์ ๊ฐฑ์ .
{
d[vertex[now][i].first] = cost;
pq.push(make_pair(-cost,vertex[now][i].first));
}
}
}
}
int main(){
int v, e;
cin >> v >> e;
int start;
cin >> start;
for(int i =0; i < e; i++){
int in, to, w;
cin >> in >> to >> w;
vertex[in].push_back({to, w});
}
fill(d, d+100001, INF);
find_min_path(start);
// ๋ชจ๋ ๋
ธ๋๋ก ๊ฐ๊ธฐ ์ํ ์ต๋จ ๊ฑฐ๋ฆฌ๋ฅผ ์ถ๋ ฅ
for (int i = 1; i <= v; i++)
{
// ๋๋ฌํ ์ ์๋ ๊ฒฝ์ฐ
if (d[i] == INF) {
cout << "INF" << '\n';
}
// ๋๋ฌํ ์ ์๋ ๊ฒฝ์ฐ ๊ฑฐ๋ฆฌ๋ฅผ ์ถ๋ ฅ
else {
cout << d[i] << '\n';
}
}
return 0;
}
'Algorithm๐ฐ > ๋ฐฑ์ค' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[๋ฐฑ์ค] 11779 ์ต์ ๋น์ฉ ๊ตฌํ๊ธฐ2 dijkstra (0) | 2021.03.10 |
---|---|
[๋ฐฑ์ค] 1916 ์ต์๋น์ฉ ๊ตฌํ๊ธฐ dijkstra (0) | 2021.03.10 |
[๋ฐฑ์ค] 12865 ํ๋ฒํ ๋ฐฐ๋ญ knapsack ์๊ณ ๋ฆฌ์ฆ (0) | 2021.03.09 |
[๋ฐฑ์ค] 11000 ๊ฐ์์ค ๋ฐฐ์ priority-queue, greedy (0) | 2021.03.07 |
[๋ฐฑ์ค] 10974 ๋ชจ๋ ์์ด ๋ฐฑํธ๋ํน (0) | 2021.02.27 |
๋๊ธ