Pagini recente » Cod sursa (job #2600238) | Cod sursa (job #1072949) | Cod sursa (job #1732725) | Cod sursa (job #2143774) | Cod sursa (job #1775070)
#include <fstream>
#include <climits>
#include <set>
#define NMAX 50100
#define INF INT_MAX
using namespace std;
ifstream f("dijkstra.in");
ofstream g("dijkstra.out");
struct nod{
int info,cost;
nod* urm;
};
struct nod* G[NMAX];
set< pair<int,int> > coada;
nod* inserare_inceput(nod* p,int x,int y){
nod* elem=new nod;
elem->info=x;
elem->cost=y;
elem->urm=p;
return elem;
}
int n,m,d[NMAX];
void citire(){
f>>n>>m;
int i,x,y,z;
for(i=1;i<=m;i++){
f>>x>>y>>z;
G[x]=inserare_inceput(G[x],y,z);
}
}
void dijkstra(){
d[1]=0;
int i;
nod* parcurg=G[1];
while(parcurg){
d[parcurg->info]=parcurg->cost;
coada.insert(make_pair(d[parcurg->info],parcurg->info));
parcurg=parcurg->urm;
}
for(i=1;i<=n;i++)
if(d[i]==0)
d[i]=INF;
while(!coada.empty()){
int val=coada.begin()->first;
int x=coada.begin()->second;
coada.erase(coada.begin());
nod* parcurg=G[x];
while(parcurg){
if(d[parcurg->info]>val+parcurg->cost){
d[parcurg->info]=val+parcurg->cost;
coada.insert(make_pair(d[parcurg->info],parcurg->info));
}
parcurg=parcurg->urm;
}
}
for(i=2;i<=n;i++)
if(d[i]==INF)
g<<0<<' ';
else
g<<d[i]<<' ';
}
int main(){
citire();
dijkstra();
return 0;
}