Pagini recente » Cod sursa (job #2610516) | Cod sursa (job #690133) | Cod sursa (job #1913226) | Cod sursa (job #1697954) | Cod sursa (job #381779)
Cod sursa(job #381779)
using namespace std;
#include <cstdio>
#include <vector>
#define NN 50005
#define INFINIT 1<<30
struct nod{
int capat,cost;
nod * next;
};
nod * G[NN];
int n,v[NN],d[NN],t[NN];
void addArc(int i,int j,int c){
nod *p=new nod;
p->capat=j , p->cost=c;
p->next=G[i];
G[i] = p;
}
void init(int sursa){
for(int i=0;i<=n;++i)
v[i]=0,t[i]=-1,d[i]=INFINIT;
v[sursa]=1,t[sursa]=0,d[sursa]=0;
for(nod *p=G[sursa]; p ; p=p->next)
t[p->capat]=sursa, d[p->capat]=p->cost;
}
void dijkstra(int sursa){
init(sursa);
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;
for( ; m ;--m){
int i,j,c;
scanf("%d%d%d",&i,&j,&c);
addArc(i,j,c);
}
dijkstra(1);
//for(int i=1;i<=n;++i)
// printf("%d ",t[i]);
freopen("dijkstra.out","w",stdout);
for(int i=2;i<=n;++i)
printf("%d ",d[i]!=INFINIT?d[i]:0);
printf("\n");
return 0;
}