Cod sursa(job #2549087)

Utilizator mihaela.macarie01@yahoo.comMihaela Macarie [email protected] Data 17 februarie 2020 11:54:04
Problema Algoritmul lui Dijkstra Scor 90
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.21 kb
#include <iostream>
#include <fstream>
#include <climits>
#define oo INT_MAX
#define N 50002
#define M 5*N
using namespace std;

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

int n,m,start[N],t[3][M],d[N],viz[N],coada[2*M],vf;

int citire()
{
    x>>n>>m;
    for(int i=1;i<=m;i++)
    {
        x>>vf>>t[0][i]>>t[2][i];
        t[1][i]=start[vf];
        start[vf]=i;
    }
}

void ini()
{
    for(int i=2;i<=n;i++)
        d[i]=oo;
}

void ford()
{
    int pi=1,ps=1;
    coada[pi]=1;
    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]])
            {
                d[t[0][p]]=d[nod]+t[2][p];
                if(viz[t[0][p]]==0)
                {
                    viz[t[0][p]]=1;
                    coada[++pi]=t[0][p];
                }
            }
            p=t[1][p];
        }
        ps++;
    }
}

void afis()
{
    for(int i=2;i<=n;i++)
    {
        if(d[i]==oo)
            d[i]=0;
        y<<d[i]<<" ";
    }
}

int main()
{
    citire();
    ini();
    ford();
    afis();
    x.close();
    y.close();
    return 0;
}