Pagini recente » Cod sursa (job #2925780) | Cod sursa (job #2731484) | Cod sursa (job #1608089) | Cod sursa (job #2548442) | Cod sursa (job #1696309)
#include <fstream>
#include <vector>
#include <queue>
#include <climits>
#define NMAX 50005
#define INF INT_MAX
using namespace std;
ifstream cin("dijkstra.in");
ofstream cout("dijkstra.out");
vector< pair<int,int> > G[NMAX];
int n,p,D[NMAX],t[NMAX],viz[NMAX],m;
void citire(){
cin>>n>>m;
p=1;
int i,j,x,parcurg;
for(parcurg=1;parcurg<=m;parcurg++){
cin>>i>>j>>x;
G[i].push_back(make_pair(j,x));
}
}
queue<int> coada;
void dijkstra(){
viz[p]=1;
vector< pair <int,int> >::iterator it;
int i,k;
for(it=G[p].begin();it!=G[p].end();++it){
D[it->first]=it->second;
coada.push(it->first);
t[it->first]=p;
}
for(i=1;i<=n;i++)
if(D[i]==0){
D[i]=INF;
t[i]=0;
}
bool ok=1;
while(ok){
int MIN=INF;
for(i=1;i<=n;i++)
if(!viz[i]&&MIN>D[i]){
MIN=D[i];
k=i;
}
if(MIN!=INF){
viz[k]=1;
for(it=G[k].begin();it!=G[k].end();++it)
if(!viz[it->first]&&D[it->first]>D[k]+it->second){
D[it->first]=D[k]+it->second;
t[it->first]=k;
}
}
else ok=0;
}
for(i=1;i<=n;i++)
if(i==p)
;
else if(D[i]==INF)
cout<<0<<' ';
else
cout<<D[i]<<' ';
}
void afisare(){
vector< pair<int,int> >::iterator it;
int i;
for(i=1;i<=n;i++){
for(it=G[i].begin();it!=G[i].end();++it)
cout<<i<<' '<<it->first<<' '<<it->second<<'\n';
}
}
int main(){
citire();
dijkstra();
//afisare();
return 0;
}