Pagini recente » Cod sursa (job #2059190) | Cod sursa (job #1098957) | Cod sursa (job #389370) | Cod sursa (job #2978066) | Cod sursa (job #1289429)
#include <iostream>
#include <fstream>
#define NMAX 999999999
using namespace std;
ifstream fin("dijkstra.in");
ofstream fout("dijkstra.out");
struct Nod{int inf,cost; Nod *leg;}*L[250001];
typedef Nod* nod;
int cost[50001],viz[50001],t[50001],n,m;
void afisare_graf()
{
for(int i=1; i<=n; i++){
nod q=L[i];
while (q){fout<<"Avem nod de la "<<i<<" la "<<q->inf<<" de cost "<<q->cost<<"\n";q=q->leg;}
fout<<endl;
}
}
void add(int x, int y, int c)
{
nod p=new Nod;
p->inf=y;
p->cost=c;
p->leg=L[x];
L[x]=p;
}
void initializare(){
for(int i=2; i<=n; i++)
cost[i]=NMAX;
cost[1]=0;
viz[1]=1;
for(nod q=L[1];q;q=q->leg) cost[q->inf]=q->cost;
}
int minim(){
int i,mini=NMAX,q=0;
for(i=2; i<=n; i++)if(!viz[i] and cost[i]<mini) {mini=cost[i]; q=i;}
return q;
}
void afisare(){
for(int i=2; i<=n; i++) fout<<cost[i]<<" ";fout<<endl;
}
void Dijkstra(){
int k=1;
while (k){
k=minim();
viz[k]=1;
for(nod q=L[k];q;q=q->leg)
if(cost[q->inf]>cost[k]+q->cost)
{
cost[q->inf]=cost[k]+q->cost;
t[q->inf]=k;}
//afisare();
}
}
int main()
{
int x,y,c;
fin>>n>>m;
for(int i=1; i<=m; i++)
{
fin>>x>>y>>c;
add(x,y,c);
//add(y,x,c);
}
initializare();
Dijkstra();
afisare();
return 0;
}