Cod sursa(job #1130290)

Utilizator blu3pirateNancu Cristian blu3pirate Data 28 februarie 2014 12:21:12
Problema Algoritmul lui Dijkstra Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.26 kb
#include <fstream>

using namespace std;


struct list{
    int v,c;
    list *adr;
};

void add(int i, int j, list *&p)
{
    list *tmp;
    tmp=new list;
    tmp->v=i;
    tmp->c=j;
    tmp->adr=p;
    p=tmp;
}


unsigned int d[50001],pr[50001],v[50001],q[250001];
list *l[50001];

int main()
{   int i,n,m,a,b,dist,fi=1,la=0;
    ifstream f("dijkstra.in");
    ofstream g("dijkstra.out");
    f>>n>>m;
    for(i=1;i<=n;i++)
    {
        l[i]=new list;
        l[i]->adr=NULL;
    }
    for(i=1;i<=m;i++)
    {
    f>>a>>b>>dist;
    add(a,dist,l[b]);
    add(b,dist,l[a]);
    }

 /*   for(i=1;i<=n;i++)
    {
        g<<i<<'\n';
        while(l[i]->adr!=NULL)
        {
            g<<l[i]->v<<' '<<l[i]->c<<'\n';
            l[i]=l[i]->adr;
        }
    }*/


    for(i=2;i<=n;i++) d[i]=2100000000;
    q[++la]=1;
    //v[1]=1;
    while(fi<=la)
    {
        if(l[q[fi]]->adr!=NULL)
        {
            q[++la]=l[q[fi]]->v;
            if(d[q[fi]]+l[q[fi]]->c < d[l[q[fi]]->v])
            {
                d[l[q[fi]]->v]=d[q[fi]]+l[q[fi]]->c;
                pr[l[q[fi]]->v]=q[fi];
            }
            l[q[fi]]=l[q[fi]]->adr;
        }
        else {fi++; v[q[fi]]=1; }
    }

    for(i=2;i<=n;i++) g<<d[i]<<' ';
    g<<'\n';

    f.close();
    g.close();
    return 0;
}