Cod sursa(job #1837897)

Utilizator AsttridMocanu Ada Astrid Asttrid Data 30 decembrie 2016 16:14:26
Problema Algoritmul lui Dijkstra Scor 10
Compilator cpp Status done
Runda Arhiva educationala Marime 0.92 kb
///alg dijkstra---liste
#include<iostream>
#include<fstream>
using namespace std;
const int oo=50002;
ifstream in("dijkstra.in");
ofstream out("dijkstra.out");
struct nod{int inf,cost;
nod *urm;};
int d[oo],t[oo],v,n,m,k,s[oo];
nod *l[oo];
void citire(){in>>n>>m;
v=1;
int i,x,y,c;
nod *p;
for(i=1;i<=m;i++){in>>x>>y>>c;
p=new nod;p->inf=y;p->cost=c;p->urm=l[x];l[x]=p;
}
in.close();
}

void rez(){int k,minn,pozmin,i,j,dist;
for(j=1;j<=n;j++)
d[j]=oo;

s[v]=0;d[v]=0;

nod*p;
p=l[v];
while(p){i=p->inf;d[i]=p->cost;t[i]=v;p=p->urm;}


k=1;
while(k<=n-1){
minn=oo;
for(i=1;i<=n;i++)
if(d[i]<minn && s[i]==0){minn=d[i];pozmin=i;}
s[pozmin]=1;

p=l[pozmin];
while(p){if(d[p->inf]>d[pozmin]+p->cost)
    d[p->inf]=d[pozmin]+p->cost;  p=p->urm;}
++k;
}}

void afisare(){int i;
for(i=1;i<=n;i++)
if(i!=v && d[i]<oo){out<<d[i]<<" ";}}


int main(){
citire();
rez();
afisare();
return 0;}