Cod sursa(job #857569)

Utilizator marinutzacatana marina marinutza Data 17 ianuarie 2013 23:21:00
Problema Algoritmul lui Dijkstra Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 0.98 kb
#include<fstream>
#include<queue>
using namespace std;
ifstream f("dijkstra.in");
ofstream g("dijkstra.out");
#define nmax 50010
#define mmax 250010
int n,m,i,eq[nmax],d[nmax];
queue <int> q;
struct nod
{
    int nr,cst;
    nod *adr;
} *a[nmax];
void citire()
{
    int x,y,cst;
    f>>n>>m;
    for(i=1;i<=m;i++)
    {
        f>>x>>y>>cst;
        nod *p=new nod;
        p->nr=y;
        p->cst=cst;
        p->adr=a[x];
        a[x]=p;
    }
}
void parcurgere(int x)
{
    for(nod *p=a[x];p!=NULL;p=p->adr)
    {
        if(d[x]+p->cst<d[p->nr])
        {
            d[p->nr]=d[x]+p->cst;
            if(eq[p->nr]==0)
            {
                q.push(p->nr);
                eq[p->nr]=1;
            }
        }
    }
    eq[x]=0;
    q.pop();
    parcurgere(q.front());
}
int main()
{
    citire();
    for(i=2;i<=n;i++)
        d[i]=500000;
    q.push(1);
    parcurgere(1);
    for(i=2;i<=n;i++)
        g<<d[i]<<' ';
    return 0;
}