Cod sursa(job #2484263)

Utilizator XXMihaiXX969Gherghinescu Mihai Andrei XXMihaiXX969 Data 30 octombrie 2019 20:38:27
Problema Algoritmul lui Dijkstra Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.43 kb
#include <iostream>
#include <fstream>
#include <queue>
#include <vector>
#include <fstream>

using namespace std;

ifstream in("dijkstra.in");
ofstream out("dijkstra.out");

const int DIM = 50005;
const int oo = (1 << 30);

int D[DIM];
bool Ex[DIM];

int n,m;

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

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

vector < pair <int, int> > V[DIM];


void dijktra(int x)
{
    for(int i = 1;i <= n;i++)
        D[i] = oo;
    Coada.push(x);
    Ex[x] = true;
     D[x] = 0;
    while(!Coada.empty())
    {
        int nod = Coada.top();
        Coada.pop();
        Ex[nod] = false;
        for(size_t i = 0;i < V[nod].size();i++)
        {
            int vecin = V[nod][i].first;
            int c = V[nod][i].second;
            if(c + D[nod] < D[vecin])
            {
                D[vecin] = c + D[nod];
                if(Ex[vecin] == false)
                {Coada.push(vecin);
                Ex[vecin] = true;
                }
            }
        }

    }
}

int main()
{
    in >> n >> m;

    for(int i = 1; i <= m; i++)
    {
        int x, y, c;
        in >> x >> y >> c;
        V[x].push_back(make_pair(y,c));

    }

    dijktra(1);

    for(int i = 2;i <= n; i++)
        if(D[i] != oo)
         out << D[i]<<" ";
    else
        out <<"0"<<" ";

    return 0;
}