Cod sursa(job #1083572)

Utilizator Bigb21Avram Bogdan Bigb21 Data 16 ianuarie 2014 07:42:56
Problema Algoritmul lui Dijkstra Scor 10
Compilator cpp Status done
Runda Arhiva educationala Marime 1.33 kb
#include<fstream>
#include<cstdio>
#define INF=99999
using namespace std;
ifstream in("dijkstra.in");
ofstream out("dijkstra.out");

struct graf
{
     int nod,cost;
     graf *next;

};
graf *a[50001];
int d[50001],viz[50001],n,m;

void add (int loc, int nodaferent,int cost)
{
    graf *q;
    q=new graf;
    q->nod=nodaferent;
    q->cost=cost;
    q->next=a[loc];
    a[loc]=q;

}

void read()
{
     int x,y,z;
     in>>n>>m;

   for(int i=1; i<=m; i++)
   { in>>x>>y>>z;
     add(x,y,z);

   }


}
void dijkstra ()
{

     for(int i=2; i<=n; i++)
          { d[i]=999999;
          //  tata[i]=1;
          }
     int min,k=0;
    for(int j=1; j<=n;j++)
        {  min=999999;

      for(int i=1; i<=n; i++)
          if(min>d[i]  && !viz[i])
          {
               min=d[i];
               k=i;
          }

           viz[k]=1;
        graf *t=a[k];
            while(t)
            { if(d[t->nod]>d[k]+t->cost)

                   d[t->nod]=d[k]+t->cost;
                   // tata[t->nod]=k;

              t=t->next;
            }

}
}
int main ()
{

      read();
      dijkstra();
      for(int i=2; i<=n; i++)
        if(d[i]==99999)
        out<<0<<" " ;
      else
           out<<d[i]<<" " ;
      in.close();
      out.close();
      return 0;

}