Pagini recente » Cod sursa (job #884608) | Cod sursa (job #891555) | Cod sursa (job #1905208) | Cod sursa (job #524959) | Cod sursa (job #156493)
Cod sursa(job #156493)
#include<fstream.h>
#define max_n 50000
#define in "dijkstra.in"
#define out "dijkstra.out"
#define infinit 32000
ifstream fin(in);
ofstream fout(out);
struct nod{unsigned int nd,c; nod *urm;} *p[max_n];
unsigned int s[max_n],d[max_n],n;
void citire();
void init(unsigned int x);
void dijkstra();
void afisare();
int main()
{
citire();
init(1);
afisare();
fout.close();
fin.close();
return 0;
}
void afisare()
{
for(unsigned int i=2;i<=n;i++)
fout<<d[i]<<' ';
fout<<'\n';
}
void dijkstra()
{
unsigned int min=infinit,poz,i;
nod *q;
for(i=1;i<=n;i++)
if(s[i]!=1 && d[i]<min && d[i]!=0)
min=d[i],poz=i;
if(min!=infinit)
{
s[poz]=1;
q=p[poz];
while(q)
{
if(s[q->nd]!=1)
{
if(d[q->nd]==0)
d[q->nd]=d[poz]+q->c;
else
if(d[q->nd]>d[poz]+q->c)
d[q->nd]=d[poz]+q->c;
}
q=q->urm;
}
}
}
void init(unsigned int x)
{
s[x]=1;
nod *q;
q=p[x];
while(q)
{
d[q->nd]=q->c;
q=q->urm;
}
for(unsigned int i=2;i<=n;i++)
dijkstra();
}
void citire()
{
unsigned int x,y,z;
long m;
nod *q;
fin>>n;
fin>>m;
while(fin>>x>>y>>z)
{
q=new nod;
q->nd=y;
q->c=z;
q->urm=p[x];
p[x]=q;
q=new nod;
q->nd=x;
q->c=z;
q->urm=p[y];
p[y]=q;
}
}