Pagini recente » Cod sursa (job #1254170) | Cod sursa (job #840866) | Cod sursa (job #653953) | Cod sursa (job #683766) | Cod sursa (job #1729306)
#include <iostream>
#include <fstream>
#include <algorithm>
#include <vector>
#include <queue>
#include <iterator>
#define NMAX 5005
#define INF 2000
using namespace std;
class vfval{
public:
int vf,val;
vfval(int vf,int val): vf{vf},val{val}{}
};
class comparator{
public:
bool operator()(vfval a,vfval b){
return a.val > b.val;
}
};
int main()
{
int l1,l2,val,n,m;
vector<vfval> v[NMAX];
int d[NMAX];
ifstream f("dijkstra.in");
ofstream g("dijkstra.out");
f >> n >> m;
for(int i=0;i<m;i++){
f >> l1 >> l2 >> val;
v[l1].push_back(vfval(l2,val));
v[l2].push_back(vfval(l1,val));
}
for(int i=2;i<=n;i++)
d[i]=INF;
d[1]=0;
priority_queue<vfval,vector<vfval>,comparator> que;
que.push(vfval(1,0));
while(!que.empty()){
vfval el = que.top();
que.pop();
for(vector<vfval>::iterator it=v[el.vf].begin();it!=v[el.vf].end();it++){
if(d[(*it).vf] > el.val + (*it).val){
d[(*it).vf] = el.val + (*it).val;
que.push(vfval{(*it).vf,d[(*it).vf]});
}
}
}
for(int i=2;i<=n;i++)
if(d[i]!=INF)
g << d[i] << ' ';
else g << 0 << ' ';
g.close();
f.close();
return 0;
}