Cod sursa(job #2385370)

Utilizator Zamfirescuste2Zamfirescu Stefan Zamfirescuste2 Data 21 martie 2019 20:46:37
Problema Algoritmul lui Dijkstra Scor 10
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.48 kb
#include <iostream>
#include <fstream>
#include <queue>
#include <vector>
using namespace std;

#define NMax 50005
#define oo (1 << 30)

int N,M;
int d[NMax];
bool inCoada[NMax];
vector < pair < int, int > > g[NMax];

struct comparaDist
{
    bool operator ()( int x, int y )
    {
        return d[x] > d[y];
    }
};

priority_queue < int, vector < int >, comparaDist > Coada;

void dijkstra ( int nodStart )
{
    for (int  i = 1; i <= N; i++ )
        d[i] = oo;

    d[nodStart] = 0;
    Coada.push(nodStart);
    inCoada[nodStart] = true;

    while(!Coada.empty())
    {
        int nodCurent = Coada.top();
        Coada.pop();
        inCoada[nodCurent] = false;
        for (size_t i = 0; i < g[nodCurent].size(); i++ )
        {
            int Vecin = g[nodCurent][i].first;
            int Cost = g[nodCurent][i].second;
            if ( d[nodCurent] + Cost < d[Vecin])
                d[Vecin]  = d[nodCurent] + Cost;
            if ( inCoada[Vecin] == false )
                Coada.push(Vecin),
                inCoada[Vecin] = true;


        }


    }

}

int main()
{
    freopen("dijkstra.in","r",stdin);
    freopen("dijkstra.out","w",stdout);
    scanf("%d %d", &N, &M );
    int x,y,c;
    for (int  i = 1; i <= M; i++ )
    {
        scanf("%d %d %d", &x, &y, &c);
        g[x].push_back ( make_pair(y,c));

    }


    dijkstra(1);

    for (int i = 2; i <= N; i++ )
    {
        if ( d[i] != oo )
            printf( "%d ", d[i] );
        else
            printf("0");
    }
    return 0;
}