Pagini recente » Cod sursa (job #3165859) | Cod sursa (job #2049206) | Cod sursa (job #324525) | Cod sursa (job #115692) | Cod sursa (job #356462)
Cod sursa(job #356462)
#include <fstream>
#include <vector>
#include <queue>
#include <limits>
#include <iostream>
using namespace std;
int main(){
ifstream in("dijkstra.in");
ofstream out("dijkstra.out");
int n,m;in>>n>>m;
vector<vector<pair<int,int> > > v(n,vector<pair<int,int> >());
vector<int> cost(n+1,numeric_limits<int>::max());
vector<bool> nevizitat(n,true);
for(int i=0;i<m;i++){
int x,y,c;
in>>x>>y>>c;
v[x-1].push_back(pair<int,int>(y-1,c));
v[y-1].push_back(pair<int,int>(x-1,c));
}
cost[0]=0;
bool one_more=true;
while(one_more){
one_more=false;
int min=n;
for(int i=0;i<n;i++){
if(nevizitat[i]){
one_more=true;
if(cost[i]<cost[min]) min=i;
}
}
if(min!=n){
for(int i=0;i<v[min].size();i++){
if(nevizitat[v[min][i].first]){
cost[v[min][i].first]=std::min(cost[v[min][i].first],cost[min]+v[min][i].second);
}
}
nevizitat[min]=false;
}
}
for(int i=1;i<n;i++){
if(cost[i]==numeric_limits<int>::max()) cout<<"0 ";
else out<<cost[i]<<" ";
}
}