Cod sursa(job #1512011)

Utilizator Corneliu10Dumitru Corneliu Corneliu10 Data 27 octombrie 2015 16:32:46
Problema Algoritmul lui Dijkstra Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.24 kb
#include <cstdio>
#include <fstream>
#include <vector>
#include <set>
#include <queue>
#define Nmax 50005
#define inf 1<<30
#define inFile "dijkstra.in"
#define outFile "dijkstra.out"

using namespace std;

queue < pair <int, int> > T;
vector <int> G[Nmax],C[Nmax];
int dist[Nmax],n,m;

void Dijkstra(int start)
{
    int i,nod,val,ls;
    for(i=1;i<=n;i++)
        dist[i] = inf;

    dist[start] = 0;
    T.push( make_pair(0,start) );

    while(T.size() > 0)
    {
        val = (T.front()).first;
        nod = (T.front()).second;
        T.pop();
        ls = G[nod].size();

        for(i=0;i < ls;i++)
            if(dist[G[nod][i]] > val + C[nod][i])
            {
                dist[G[nod][i]] = val + C[nod][i];
                T.push( make_pair(dist[G[nod][i]],G[nod][i]) );
            }
    }
}

int main()
{
    int i,a,b,c;
    freopen(inFile,"r",stdin);
    freopen(outFile,"w",stdout);

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

    for(i=0;i<m;i++)
    {
        scanf("%d%d%d",&a,&b,&c);
        G[a].push_back(b);
        C[a].push_back(c);
    }

    Dijkstra(1);
    for(i=2;i<=n;i++)
    {
        if(dist[i] == inf)
            printf("0 ");
        else
            printf("%d ",dist[i]);
    }
}