Cod sursa(job #980438)

Utilizator BlackLordFMI Alex Oprea BlackLord Data 4 august 2013 17:40:32
Problema Algoritmul lui Dijkstra Scor 50
Compilator cpp Status done
Runda Arhiva educationala Marime 1.25 kb
#include <stdio.h>
#include <vector>
#define DIM 50010
using namespace std;
int n, m, v[DIM], d[DIM], x, y, i, j, c, minim, pminim;
const int INF=(1<<30);

struct dijkstra{
    int v, c;
};

vector<dijkstra> L[DIM];
dijkstra aux;

int main(){
    freopen("dijkstra.in", "r", stdin);
    freopen("dijkstra.out", "w", stdout);
    scanf("%d %d", &n, &m);
    for(i=1; i<=n; i++)
        d[i]=INF;
    d[1] = 0;
    for(i=1; i<=m; i++)
    {
        scanf("%d %d %d", &x, &y, &c);
        aux.v=y;
        aux.c=c;
        L[x].push_back(aux);
    }
    while (1) {
        minim = INF;
        for (i=1;i<=n;i++) {
            if (v[i] == 0 && d[i] < minim) {
                minim = d[i];
                pminim = i;
            }
        }
        if (minim == INF) {
            break;
        }
        v[pminim]  = 1;
        for (i=0;i<L[pminim].size();i++) {
            int vecin = L[pminim][i].v;
            int cvecin = L[pminim][i].c;
            if (v[vecin] == 0 && d[vecin] > d[pminim] + cvecin)
                d[vecin] = d[pminim] + cvecin;

        }
    }
    for(i=2; i<=n; i++)
        if(d[i]==INF)
            printf("0 ");
        else
            printf("%d ", d[i]);
    printf("\n");
    return 0;
}