Cod sursa(job #1325106)

Utilizator sergiunascaSergiu Nasca sergiunasca Data 23 ianuarie 2015 11:49:42
Problema Algoritmul lui Dijkstra Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.18 kb
#include <stdio.h>
#include <vector>
#include <utility>
#include <queue>
#define NMax 50001
#define INF 1<<28
using namespace std;
int n,m,v,d[NMax],x,y,c;
std::vector< std::pair<int,int> > G[NMax];
std::queue< std::pair<int,int> > coada;
void dijkstra(int x)
{
    for(int i=1;i<=n;++i)d[i] = INF;
    d[x] = 0;
    coada.push(std::make_pair(x,0));
    while(!coada.empty())
    {
        int nod = (coada.front()).first;
        int val = (coada.front()).second;
        coada.pop();
        for(int i=0;i<G[nod].size();++i)
        {
            if(d[G[nod][i].first] > val + G[nod][i].second)
            {
                d[G[nod][i].first] = val + G[nod][i].second;
                coada.push(std::make_pair(G[nod][i].first,d[G[nod][i].first]));
            }
        }
    }
}
int main()
{
    freopen("dijkstra.in","r",stdin);
    freopen("dijkstra.out","w",stdout);
    scanf("%d %d",&n,&m);
    for(int i=1;i<=m;++i)
    {
        scanf("%d %d %d",&x,&y,&c);
        G[x].push_back(std::make_pair(y,c));
    }
    dijkstra(1);
    for(int i=2;i<=n;++i)
    {
        if(d[i]==INF)printf("0 ");
        else printf("%d ",d[i]);
    }
    return 0;
}