Cod sursa(job #1851001)

Utilizator alex99Chelba Alexandru alex99 Data 19 ianuarie 2017 09:32:26
Problema Algoritmul lui Dijkstra Scor 90
Compilator cpp Status done
Runda Arhiva educationala Marime 1.52 kb
#include <fstream>

using namespace std;
ifstream f("dijkstra.in");
ofstream g("dijkstra.out");
int n,m,i,j,x,y,z,d[50001],t[50001],inc,sf,nod;
struct nod1{
int nr,val;
nod1 *urm;};

nod1 *a[50001],*p,*prim,*ultim;
void pune(int x,int y,int z)
{
    p=new nod1;
    p->nr=y;
    p->val=z;
    p->urm=0;
    p->urm=a[x];
     a[x]=p;


}
int main()
{
    f>>n>>m;
     for(i=1;i<=m;i++)
        f>>x>>y>>z,pune(x,y,z);
    /**for(i=1;i<=n;i++)
      {
          g<<"vecinii "<<i<<" ";
      p=a[i];
      while(p){g<<p->nr<<" ";p=p->urm;}
      }
      **/

    for(i=2;i<=n;i++)
        d[i]=999999;

    prim=new nod1;
    prim->nr=1;
    prim->urm=NULL;
    ultim=prim;

    while(prim)///coada vida
    {

        nod=prim->nr;
         nod1 *q=a[nod];
        while(q)
        {
            if(d[q->nr]>d[nod]+q->val)
            {
                d[q->nr]=d[nod]+q->val;
                t[q->nr]=nod;

               /* if(prim==NULL)
                {prim= new nod1;
                prim->nr=q->nr;prim->urm=NULL;ultim=prim;
                }
                else
                {*/
                  nod1 *p1=new nod1;
                p1->nr=q->nr;
                p1->urm=0;
                ultim->urm=p1;
                ultim=p1;

           // }
            }
            q=q->urm;
        }
         p=prim;
        prim=prim->urm;
        delete p;
          }
    for(i=2;i<=n;i++)
        if(d[i]==999999) g<<"0 ";
    else g<<d[i]<<" ";
    return 0;
}