Pagini recente » Cod sursa (job #3031627) | Cod sursa (job #19309) | Cod sursa (job #612156) | Cod sursa (job #1011400) | Cod sursa (job #1579465)
#include <fstream>
#include <vector>
#include <climits>
#define INF INT_MAX/2-1
using namespace std;
struct nod{
bool vis;
int dst;
vector< pair<int, int> > v;
};
int main()
{
ifstream in("dijkstra.in");
int n, m;
in>>n>>m;
nod w[50001]={false, INF};
for(int i=0;i<m;i++){
int a, b, d;
in>>a>>b>>d;
w[a].dst=INF;
w[b].dst=INF;
w[a].vis=false;
w[b].vis=false;
w[a].v.push_back(make_pair(b, d));
}
int crt=1;
bool f=true;
w[crt].dst=0;
while(f){
for(int i=0;i<w[crt].v.size();i++){
if(w[crt].v[i].second+w[crt].dst<w[w[crt].v[i].first].dst){
w[w[crt].v[i].first].dst=w[crt].v[i].second+w[crt].dst;
}
}
w[crt].vis=true;
pair<int, int> minim=make_pair(0, INF);
for(int i=1;i<=n;i++){
if(w[i].vis==false&&w[i].dst<minim.second){
minim=make_pair(i, w[i].dst);
}
}
crt=minim.first;
if(minim.first==0)f=false;
}
ofstream out("dijkstra.out");
for(int i=2;i<=n;i++){
out<<(w[i].dst!=INF?w[i].dst:0)<<" ";
}
return 0;
}