Cod sursa(job #505869)

Utilizator mytzuskyMihai Morcov mytzusky Data 4 decembrie 2010 11:34:30
Problema Algoritmul lui Dijkstra Scor 10
Compilator cpp Status done
Runda Arhiva educationala Marime 1.24 kb
#include <iostream>
#include <fstream>

#define L 50001
#define oo 0x3f3f3f

using namespace std;

int n,m, lg[L],viz[L];
struct nod{
    int inf,cost;
    nod *urm;
};

nod *g[L];

void add(int x,int y,int z)
{
    nod *aux = new nod;
    aux->inf=y;
    aux->cost=z;
    aux->urm=g[x];
    g[x]=aux;
}

void citire()
{
    ifstream f("dijkstra.in");

    f>>n>>m;
    int x,y,z;
    for(int i=0;i<m;i++)
    {
            f>>x>>y>>z;
            add(x,y,z);
    }
}

void Dijkstra()
{
    for(int i=1;i<=n;i++)  lg[i]=oo;
    lg[1]=0;

   // for(int k=1;k<=n;k++)
    for(nod *p=g[1];p;p=p->urm )
            lg[p->inf]=p->cost;

    for(int i=1;i<n;i++)
    {
        int nodmin,cmin=oo;

        for(int k=1;k<=n;k++)
            if(!viz[k] && cmin>lg[k])
                cmin=lg[k],nodmin=k ;

        if(cmin!=oo)
        {
            viz[nodmin]=1;

            for(nod *p=g[nodmin];p;p=p->urm)
                if(!viz[p->inf] && lg[p->inf]>cmin+p->cost)
                            lg[p->inf]=lg[nodmin]+p->cost;
        }
    }

}

int main()
{
    ofstream g("dijkstra.out");
    citire();
    Dijkstra();
    for(int i=2;i<=n;i++)
        g<<lg[i]<<" ";




    return 0;
}