Cod sursa(job #1736692)

Utilizator BlackNestaAndrei Manaila BlackNesta Data 2 august 2016 14:21:37
Problema Algoritmul lui Dijkstra Scor 20
Compilator cpp Status done
Runda Arhiva educationala Marime 1.21 kb
#include <bits/stdc++.h>
#define Nmax 50005
#define MM 0x3f3f3f3f

using namespace std;

vector < pair < int, int > > L[Nmax];
int n, m, d[Nmax];
bitset <Nmax> viz;
queue <int> q;

void Citire()
{
    int x, y, z;
    ifstream f("dijkstra.in");
    f >> n >> m;
    for(int i = 1; i <= m; i++)
    {
        f >> x >> y >> z;
        L[x].push_back(make_pair(y, z));
    }
    f.close();
}

void BFS()
{
    q.push(1);
    viz[1] = 1;
    for(int i = 1; i<= n; i++)
        d[i] = MM;
    d[1] = 0;
    while(!q.empty())
    {
        int k = q.front();
        q.pop();
        for(int i = 0; i < L[k].size(); i++)
        {
            int j = L[k][i].first;
            int dist = L[k][i].second;
            if(d[k] + dist < d[j])
                d[j] = d[k] + dist;
            if(viz[j] == 0)
            {
                viz[j] = 1;
                q.push(j);
            }
        }
    }
}

void Afisare()
{
    ofstream g("dijkstra.out");
    for(int i = 2; i <= n; i++)
        if(d[i] == MM) g << 0 << " ";
        else g << d[i] << " ";
    g << "\n";
    g.close();
}

int main()
{
    Citire();
    BFS();
    Afisare();
    cout << MM;
    return 0;
}