Pagini recente » Cod sursa (job #631173) | Cod sursa (job #3146659) | Cod sursa (job #1130010) | Cod sursa (job #3031608) | Cod sursa (job #381788)
Cod sursa(job #381788)
using namespace std;
#include<iostream>
#include<fstream>
#define NN 50005
#define infi 1<<30
int v[NN],d[NN],t[NN],n;
struct nod{int capat,cost;
nod* next;};
nod *g[NN];
void adaugacapat(int i,int j,int c)
{nod *t=new nod;
t->capat=j;
t->cost=c;
t->next=g[i];
g[i]=t;
}
void dijsktra(int sursa)
{
for(int i=0;i<=n;i++)//de la 0
{
v[i]=0;
d[i]=infi;
t[i]=-1;
}
//initializam sursa cu ce trebuie
v[sursa]=1;
d[sursa]=0;
t[sursa]=0;
for(nod *p=g[sursa] ; p ; p=p->next)
{
t[p->capat]=sursa;
d[p->capat]=p->cost;
}
int gata=0;
while(!gata)
{
int pmin=0;
for(int i=1;i<=n;++i)
if(v[i]==0 && d[i]<d[pmin])
pmin=i;
if(pmin==0)
gata=1;
else
{
v[pmin]=1;
for(nod* p=g[pmin];p;p=p->next)
if(v[p->capat]==0)
if(d[p->capat]>d[pmin]+p->cost)
d[p->capat]=d[pmin]+p->cost,t[p->capat]=pmin;
}
}
}
int main()
{
freopen("dijkstra.in","r",stdin);
int m;
scanf("%d%d",&n,&m);
for(int i=1;i<=n;i++)
g[i]=NULL;
int i,j,c;
for(;m;m--)
{
scanf("%d%d%d",&i,&j,&c);
adaugacapat(i,j,c);
}
dijsktra(1);
freopen("dijkstra.out","w",stdout);
for(int i=2;i<=n;i++)
if(d[i]!=infi)printf("%d ",d[i]);
else printf("%d ",0);
}