본문 바로가기

1p1d

[Day 1] 백준 1753 : 최단경로

해법 : dijkstra

그런데 시간복잡도 문제 때문에 heap dijkstra로 작성해야 한다.

편이를 위해서 STL을 사용하였다.

dijstra 설명 : [알고리즘] Dijkstra (tistory.com)

 

[알고리즘] Dijkstra

 최단 경로 알고리즘에는 다양한 종류의 알고리즘이 있는데 그 중에서 Dijkstra는 하나의 시작점에서 다른 모든 노드까지의 거리의 최소를 알려준다. Dijkstra 알고리즘을 사용하기 위한 조건으로

algorithm01.tistory.com

 

 

#include <iostream>
#include <cstdio>
#include <vector>
#include <algorithm>
#include <queue>
#define INF 99999999
using namespace std;
int n,e;
int s;
struct tuple2 {
    int node;
    int val;
};
struct pq_tuple {
    int idx;
    int dist;
    bool operator < (const pq_tuple &node) const {
        return dist>node.dist;
    }
};
vector <tuple2> A[20005];
long long dist[20005];
int visited[20005];
priority_queue <pq_tuple> pq;
void dijkstra() {
    dist[s]=0;
    pq_tuple srg;
    int i,j;
    int _min,min_idx;
    srg.idx=s;
    srg.dist=0;
    pq.push(srg);
    while(!pq.empty()) {

        min_idx=pq.top().idx;
        _min=pq.top().dist;
        if(visited[pq.top().idx]==1) {
            pq.pop();
            continue;
        }
        visited[pq.top().idx]=1;
        pq.pop();

        for(i=0;i<A[min_idx].size();i++) {
            if(visited[A[min_idx][i].node]==0 && dist[A[min_idx][i].node]>_min+A[min_idx][i].val) {
                dist[A[min_idx][i].node]=_min+A[min_idx][i].val;
                srg.idx=A[min_idx][i].node;
                srg.dist=_min+A[min_idx][i].val;
                pq.push(srg);
            }
        }

    }
    for(i=1;i<=n;i++) {
        if(dist[i]!=INF) {
            printf("%lld\n",dist[i]);
        } else {
            printf("INF\n");
        }
    }
}
int main()
{
    //freopen("input.txt","r",stdin);
    scanf("%d %d",&n,&e);
    scanf("%d",&s);
    int i,a;
    tuple2 srg;
    for(i=0;i<e;i++) {
        scanf("%d %d %d",&a,&srg.node,&srg.val);
        A[a].push_back(srg);
    }
    for(i=1;i<=n;i++) dist[i]=INF;
    dijkstra();
    return 0;
}

'1p1d' 카테고리의 다른 글

[Day 4] 백준 7569 : 토마토  (0) 2021.01.24
[Day 3] 백준 2589 : 보물섬  (0) 2021.01.24
Schedule  (0) 2021.01.23
[Day 1] 백준 1937 : 욕심쟁이 판다  (0) 2021.01.22
[Day 2] 백준 1931 : 회의실 배정  (0) 2021.01.22