문제 출처 : https://www.acmicpc.net/problem/1753
이번 문제는 다익스트라 알고리즘의 문제였다.
우선순위 큐를 이용하여서 가중치를 기준으로 최단 경로를 구할 수 있었다.
아래는 해당 문제를 풀이한 소스 코드이다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
|
#include<stdio.h>
#include<vector>
#include<queue>
#pragma warning(disable:4996)
using namespace std;
vector < pair <int, int> > vec[20001];
int V, E;
int start;
int value[20001];
int visit[20001];
priority_queue< pair< int, int>, vector < pair < int, int> >, greater< pair< int, int > > > que;
// 우선순위 큐
int main()
{
scanf("%d %d", &V, &E);
scanf("%d", &start);
for (int i = 0; i < E; i++)
{
int index; // start
int f; // finish
int c; // cost
scanf("%d %d %d", &index, &f, &c);
vec[index].push_back({ f,c });
}
for (int i = 1; i <= V; i++)
value[i] = 1e9;
value[start] = 0;
{
que.pop();
if (visit[index] == 0)
{
visit[index]++;
value[index] = cost;
for (int i = 0; i < vec[index].size(); i++)
{
if (visit[vec[index][i].first] == 0)
{
int nx_cost = cost;
nx_cost = nx_cost + vec[index][i].second;
int nx_f = vec[index][i].first;
que.push({ nx_cost, nx_f });
}
}
}
}
for (int i = 1; i <= V; i++)
{
if (value[i] == 1e9)
printf("INF\n");
else
printf("%d\n", value[i]);
}
}
http://colorscripter.com/info#e" target="_blank" style="color:#4f4f4ftext-decoration:none">Colored by Color Scripter
|
'알고리즘' 카테고리의 다른 글
백준 2143번 문제 ( 두 배열의 합 ) (0) | 2020.07.03 |
---|---|
백준 9466번 문제 ( 텀 프로젝트 ) (0) | 2020.04.23 |
백준 1039번 문제 ( 교환 ) (0) | 2020.04.20 |
백준 2042번 문제 ( 구간 합 구하기 ) (0) | 2020.02.26 |
백준 5397번 문제 ( 키로거 ) (0) | 2020.02.26 |