Cod sursa(job #2549163)

Utilizator mihaela.macarie01@yahoo.comMihaela Macarie [email protected] Data 17 februarie 2020 12:49:19
Problema Algoritmul lui Dijkstra Scor 90
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.36 kb
#include <fstream>
#include<climits>
using namespace std;
ifstream cin ("dijkstra.in");
ofstream cout ("dijkstra.out");
int t[3][250001],start[50001],d[50001],coada[500001],viz[50001],n,m;
void citire ()
{
    cin>>n>>m; int vf;
    for(int i=1;i<=m;i++)
    {
        cin>>vf>>t[0][i]>>t[2][i];
        t[1][i]=start[vf]; start[vf]=i;
    }
}
void init ()
{
    for(int i=2;i<=n;i++) d[i]=INT_MAX;///distanta de la nodul 1 la i este initial int_max
}
void ford ()
{
    int pi=1,ps=1;
    coada[pi]=1;///calculez distanta minima de la vf. 1 la toate celelalte vf ale grafului
    while(ps<=pi)
    { int nod=coada[ps]; viz[nod]=0;
        int p=start[nod];
        while(p!=0)
        {
           if(d[nod]+t[2][p]<d[t[0][p]])///incerc sa imbunatatesc prin nod distanta pana la vecinii acestuia
           {
                  d[t[0][p]]=d[nod]+t[2][p];
                  if(viz[t[0][p]]==0)
                  {
                      viz[t[0][p]]=1; pi++; coada[pi]=t[0][p];
                  }
           } p=t[1][p];
        } ps++;
    }
}
void afiseaza_distante ()
{
    for(int i=2;i<=n;i++)
        {
            if(d[i]==INT_MAX)
                    d[i]=0;
            cout<<d[i]<<" ";
        }
}
int main()
{
    citire();
    init();
    ford();
    afiseaza_distante();
    cin.close();
    cout.close();
    return 0;
}