Pagini recente » Cod sursa (job #3160249) | Cod sursa (job #573685) | Cod sursa (job #1561032) | Cod sursa (job #2862590) | Cod sursa (job #3237115)
#include <fstream>
#include <set>
#include <queue>
#include <vector>
using namespace std;
ifstream fin ("dijkstra.in");
ofstream fout ("dijkstra.out");
set<pair<int,int>> q;
//valoarea, nodul , nodul din care pleaca cu valoarea respectiva
vector<vector< pair<int,int> >> graf;
vector<pair<int,int>> linie;
vector<int> cost_min;
int main()
{
int n,m,i,j,k,x,cost,nod;
auto it = q.end();
pair<int,int> p;
fin>>n>>m;
for(i=0;i<=n;i++)
{
graf.push_back(linie);
cost_min.push_back(2000000000);
}
cost_min[1]=0;
for(i=0;i<m;i++)
{
fin>>j>>k>>x;
graf[j].push_back({x,k});
}
q.insert({0,1});
while(q.begin()!=q.end())
{
it=q.begin();
p=*it;
cost=p.first;
nod=p.second;
q.erase(it);
for(i=0;i<graf[nod].size();i++)
{
if(cost+graf[nod][i].first<cost_min[graf[nod][i].second])
{
cost_min[graf[nod][i].second]=cost+graf[nod][i].first;
q.insert({ cost_min[graf[nod][i].second] , graf[nod][i].second });
}
}
}
for(i=2;i<=n;i++)
fout<<cost_min[i]<<' ';
fout<<'\n';
return 0;
}