Cod sursa(job #2818353)

Utilizator claudiu.draghitadraghita claudiu claudiu.draghita Data 15 decembrie 2021 21:48:41
Problema Algoritmul lui Dijkstra Scor 0
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.47 kb
#include <vector>
#include <fstream>
#include <algorithm>
#include <queue>
#include <iostream>
#define inf 1000001
using namespace std;
const int NMax = 50005;
int n,m,d[NMax];
bool ok[NMax];
vector < pair <int, int> > G[NMax];
struct compara
{
    bool operator()(int x, int y)
    {
        return d[x] > d[y];
    }
};
priority_queue<int, vector<int>, compara> coada;
void citire()
{
    cin >> n >> m;
    for (int i = 1; i <= n; i++)
    {
        int x, y, c;
        cin >> x >> y >> c;
        G[x].push_back(make_pair(y, c));
    }
}
void dijkstra(int start)
{
    for (int i = 1; i <= n; i++)
        d[i] = inf;
    d[start] = 0;
    coada.push(start);
    ok[start] = true;
    while (!coada.empty())
    {   // bfs
        int nodCurent = coada.top();
        coada.pop();
        ok[nodCurent] = false;
        for (size_t i = 0; i < G[nodCurent].size(); i++)
        {
            int nodViitor = G[nodCurent][i].first;
            int Cost = G[nodCurent][i].second;
            if (d[nodCurent] + Cost < d[nodViitor])
            {
                d[nodViitor] = d[nodCurent] + Cost;
                if (!ok[nodViitor])
                {
                    coada.push(nodViitor);
                    ok[nodViitor] = true;
                }
            }
        }
    }
}
void afi()
{
    for (int i = 2; i <= n; i++)
    {
        if (d[i] != inf)
            cout << d[i] << " ";
        else
            cout << "0 ";
    }
}
int main()
{
    citire();
    dijkstra(1);
    afi();
}