Quick actions

cmd+k|ctrl+k

Navigation

Languages

Dijkstra

Snippet info

Language

C

Visibility

public

Author

kim112mgxld

Created

2020-08-20T09:36:29Z

Updated

2020-08-20T09:36:29Z

#include <stdio.h>
#define MAX 1001
#define INFI 9999999

int D[MAX];
int map[MAX][MAX];
int visited[MAX];

void initMap(int N) {
    for (int s = 1; s <= N; s++) {
        for (int v = 1; v <= N; v++) {
            map[s][v] = INFI;
        }
    }
}

void Dijkstra (int S, int N) {
    for (int i = 0; i < MAX; i++) {
        D[i] = INFI;
    }
    
    D[S] = 0;
    
    for (int i = 1; i <= N; i++) {
        int Min = INFI;
        
        for (int j = 1; j <= N; j++) {
            if (visited[j] == 0 && Min > D[j]) {
                Min = D[j];
                S = j;
            }
        }
        
        visited[S] = 1;
        
        for (int v = 1; v <= N; v++) {
            if (map[S][v] != INFI && D[v] > D[S] + map[S][v]) {
                D[v] = D[S] + map[S][v];
            }
        }
    }
}

int main(void) {
    int N = 0;
    int M = 0;
    int S = 0;
    int V = 0;
    
    scanf("%d", &N);
    scanf("%d", &M);
    
    initMap(N);
    
    for (int i = 0; i < M; i++) {
        int s = 0;
        int v = 0;
        int w = 0;
        
        scanf("%d %d %d", &s, &v, &w);
        
        if (map[s][v] > w) {
            map[s][v] = w;
        }
    }
    
    scanf("%d %d", &S, &V);
    
    Dijkstra(S, N);
    
    printf("%d\n", D[V]);
    
    return 0;
}
INFO