문제 출처 : https://www.acmicpc.net/problem/1753

 

1753번: 최단경로

첫째 줄에 정점의 개수 V와 간선의 개수 E가 주어진다. (1≤V≤20,000, 1≤E≤300,000) 모든 정점에는 1부터 V까지 번호가 매겨져 있다고 가정한다. 둘째 줄에는 시작 정점의 번호 K(1≤K≤V)가 주어진다. 셋째 줄부터 E개의 줄에 걸쳐 각 간선을 나타내는 세 개의 정수 (u, v, w)가 순서대로 주어진다. 이는 u에서 v로 가는 가중치 w인 간선이 존재한다는 뜻이다. u와 v는 서로 다르며 w는 10 이하의 자연수이다. 서로 다른 두

www.acmicpc.net

이번 문제는 다익스트라 알고리즘의 문제였다.

우선순위 큐를 이용하여서 가중치를 기준으로 최단 경로를 구할 수 있었다. 

아래는 해당 문제를 풀이한 소스 코드이다.

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 <intint> > vec[20001];
int V, E;
int start;
int value[20001];
int visit[20001];
priority_queue< pair< intint>vector < pair < intint> >, greater< pair< intint > > > 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.push(0, start }); // 첫번째는 가중치 , 두번째는 시작점
    while (!que.empty())
    {
        int cost = que.top().first;
        int index = que.top().second;
        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
블로그 이미지

뀨심볼

깃허브 주소는 : https://github.com/hhyc2 입니다~

,