Pagini recente » Cod sursa (job #662948) | Cod sursa (job #3227524) | Cod sursa (job #1882099) | Cod sursa (job #2119807) | Cod sursa (job #3237114)
#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()
{
ios_base::sync_with_stdio(false);
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});
graf[k].push_back({x,j});
}
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;
}