Cod sursa(job #1829443)

Utilizator Garen456Paun Tudor Garen456 Data 14 decembrie 2016 23:01:20
Problema Algoritmul lui Dijkstra Scor 10
Compilator cpp Status done
Runda Arhiva educationala Marime 1.13 kb
#include <fstream>
#include <queue>
using namespace std;
ifstream fin("dijkstra.in");
ofstream fout("dijkstra.out");
typedef struct nod
{ int info,dist;
    nod *urm;
} *Pnod;
Pnod v[50001],p;
bool viz[50001];
int n,m,di[50001];
void Citire()
{ fin>>n>>m; int x,y,d,i;
    for(i=1;i<=m;i++)
    { fin>>x>>y>>d;
        p=new nod;
        p->info=y;
        p->dist=d;
        p->urm=v[x];
        v[x]=p;
        p=new nod;
        p->info=x;
        p->dist=d;
        p->urm=v[y];
        v[y]=p;
    }
   for(i=2;i<=n;i++)
        di[i]=20001;
}
void Dijkstra()
{ queue <int> c,d;
  c.push(1); d.push(0);
  int h,du;

  viz[1]=1;
  while(!c.empty())
  { h=c.front();
      du=d.front();
      c.pop();
      d.pop();
      for(p=v[h];p!=NULL;p=p->urm)
      { if(p->dist+du<di[p->info]) di[p->info]=p->dist+du;
          if(viz[p->info]==0)
          { viz[p->info]=1;
              c.push(p->info); d.push(du+p->dist);
          }
      }
  }

}
int main()
{  Citire();
    Dijkstra();
    for(int i=2;i<=n;i++)
      if(di[i]==20001) fout<<"0 ";
       else fout<<di[i]<<" ";
    return 0;
}