Cod sursa(job #2230720)

Utilizator vladsirbu23Vlad Sirbu vladsirbu23 Data 11 august 2018 10:26:46
Problema Algoritmul lui Dijkstra Scor 40
Compilator cpp Status done
Runda Arhiva educationala Marime 1.74 kb
#include <iostream>
#include <fstream>
#define pinf 100000
using namespace std;
ifstream fin("dijkstra.in");
ofstream fout("dijkstra.out");
int N,M,Start[50010],D[50010],ant[50010],viz[50010];
struct nod
{
    int info,cost;
    nod* urm;
};
nod *L[50010];
void init(int S)
{
    int i;
    for(i=1; i<=N; i++)
    {
        D[i]=pinf;
    }
    D[S]=0;
}
void citire()
{
    int i,x,y,c;
    nod *p;
    for(i=1; i<=M; i++)
    {
        fin>>x>>y>>c;
        p=new nod;
        p->urm=L[x];
        p->info=y;
        p->cost=c;
        L[x]=p;

    }
}
void djikstra()
{
    int i,j,poz,minn=0;
    nod *p;
    while(minn!=pinf)
    {
        minn=pinf;
        for(j=1; j<=N; j++)
        {
            if(viz[j]==0)
            {
                if(D[j]<minn)
                {
                    poz=j;
                    minn=D[j];
                }
            }
        }
        if(minn!=pinf)
        {
            viz[poz]=1;
            p=L[poz];
            while(p!=NULL)
            {
                if(D[p->info]>D[poz]+p->cost)
                {
                    D[p->info]=D[poz]+p->cost;
                    ant[p->info]=poz;
                }
                p=p->urm;
            }
        }
    }
}
void afisare(int S)
{
    int i;
    for(i=1; i<=N; i++)
    {
        if(i!=S)
        {
        if(D[i]!=pinf)
        fout<<D[i]<<' ';
        else
            fout<<0<<' ';
        }
    }

}
int main()
{
    int i,S;
    nod *p;
    fin>>N>>M;
    S=1;
    citire();
    init(S);
    p=L[S];
    while(p!=NULL)
    {
        D[p->info]=p->cost;
        ant[p->info]=1;
        p=p->urm;
    }
    viz[S]=1;
    djikstra();
    afisare(S);
}