Pagini recente » Cod sursa (job #766185) | Cod sursa (job #1338738) | Cod sursa (job #1033609) | Cod sursa (job #810719) | Cod sursa (job #843219)
Cod sursa(job #843219)
#include<stdio.h>
#define Nmax 50002
#define inf 100000
using namespace std;
int n,m;
int d[Nmax],viz[Nmax];
struct nod
{
int v,c;
nod *adresa;
};
nod *g[Nmax];
void adaug(int x,int y,int c)
{
nod *p;
p=new nod;
p->v=y;
p->c=c;
p->adresa=g[x];
g[x]=p;
}
void citire()
{
int i,x,y,c;
scanf("%d %d",&n,&m);
for(i=1;i<=m;++i)
{
scanf("%d %d %d",&x,&y,&c);
adaug(x,y,c);
}
}
void rezolv()
{
nod *p;
int i,j,k,dmin;
for(i=1;i<=n;++i)
d[i]=inf;
d[1]=0;
viz[1]=1;
for(p=g[1];p!=NULL;p=p->adresa)
d[p->v]=p->c;
for(k=1;k<=n-1;++k)
{
dmin=inf;
for(i=2;i<=n;++i)
if(viz[i]==0 && d[i]<dmin)
{
dmin=d[i];
j=i;
}
viz[j]=1;
for(p=g[j];p!=NULL;p=p->adresa)
if(viz[p->v]==0 && d[j]+p->c < d[p->v])
d[p->v]=d[j]+p->c;
}
}
void scrie()
{
int i;
for(i=2;i<=n;++i)
printf("%d ",d[i]);
}
int main()
{
freopen("dijkstra.in","r",stdin);
freopen("dijkstra.out","w",stdout);
citire();
rezolv();
scrie();
fclose(stdin);
fclose(stdout);
return 0;
}