Cod sursa(job #1813192)

Utilizator AlexEnacheEnache Alexandru-Paul AlexEnache Data 22 noiembrie 2016 19:39:46
Problema Algoritmul lui Dijkstra Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.32 kb
#include<fstream>
#define inf 1000009
using namespace std;
ifstream fin("dijkstra.in");
ofstream fout("dijkstra.out");
int coada[50002],pr,ul,nr,n,m,start[50005],t[3][250005],d[50002],viz[50002],k,x,y,c,vmin;
int main()
{
    int i;
    int k=0;
    for(i=1;i<=m;i++)
    {
        fin>>x>>y>>c;
        k++;
        t[0][k]=y;
        t[1][k]=c;
        t[2][k]=start[x];
        start[x]=k;
    }
    for(i=1;i<=n;i++)
    {
        viz[i]=0;
        d[i]=inf;
    }
    d[1]=0;
    coada[1]=1;
    pr=1;ul=1;
    viz[1]=1;
    nr=1;
    while(nr)
    {
        x=coada[pr];
        for(i=start[x];i;i=t[2][i])
        {
            y=t[0][i];
            c=t[1][i];
            if(d[x]+c<d[y])
            {
                d[y]=d[x]+c;
                if(viz[y]==0)
                {
                    ul++;
                    if(ul>n)
                    {
                        ul=1;
                    }
                    coada[ul]=y;
                    nr++;
                    viz[y]=1;
                }
            }
        }
        pr++;
        if(pr>n)
            pr=1;
        nr--;
        viz[x]=0;
    }
    for(i=2;i<=n;i++)
    {
        if(d[i]==inf) fout<<0<<' ';
        else fout<<d[i]<<' ';
    }

    fin.close();
    fout.close();
    return 0;
}