Cod sursa(job #1639648)

Utilizator deiandreiMazilu Andrei deiandrei Data 8 martie 2016 13:11:09
Problema Algoritmul lui Dijkstra Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.16 kb
#include <fstream>
#include <vector>
#include <algorithm>
#include <queue>
#include <cstring>
#define INF 0x3f3f3f3f
#define NMAX 50005
#define MMAX 100005
using namespace std;

int d[NMAX];

int Dijkstra(vector <pair<int, int> > v[MMAX], int n, int m, int sursa) {
    queue <int> Q;
    memset(d, INF, sizeof(d));

    d[sursa] = 0;
    Q.push(sursa);
    int x;
    while(!Q.empty()) {
        x = Q.front();
        Q.pop();
        for(vector<pair<int, int> >::iterator it = v[x].begin();it!= v[x].end(); ++it) {
            if(d[it->first]  > d[x] + it->second)
            {
                d[it->first] = d[x] + it->second;
                Q.push(it->first);
            }

        }
    }
}


int main() {
    freopen("dijkstra.in", "r", stdin);
    freopen("dijkstra.out", "w", stdout);

    int n,m;
    vector< pair<int, int> > graf[MMAX];

    scanf("%d %d", &n, &m);

    for(int i = 1; i <= m; i++) {
        int a,b,c;
        scanf("%d %d %d\n", &a, &b, &c), graf[a].push_back({b,c});
    }

    Dijkstra(graf, n, m, 1);

    for(int i = 2; i <= n; i++)
        printf("%d ", d[i] == INF ? 0 : d[i]);

    return 0;
}