Pagini recente » Cod sursa (job #743749) | Cod sursa (job #195294) | Cod sursa (job #1401091) | Cod sursa (job #1045498) | Cod sursa (job #1982007)
#include <iostream>
#include <fstream>
#include <vector>
#include <set>
using namespace std;
const int nMax = 50005;
const int mMax = 250005;
const int INF = (1 << 30);
struct arc
{
arc(int tind = 0, int tcost = 0)
{
ind = tind;
cost = tcost;
}
int ind, cost;
};
int n, m;
vector<arc> vecini[nMax];
int dp[nMax];
bool viz[nMax];
void citire()
{
ifstream in("dijkstra.in");
in >> n >> m;
int a, b, c;
for(int i = 1; i <= m; ++i)
{
in >> a >> b >> c;
vecini[a].push_back(arc(b, c));
}
in.close();
}
void rezolvare()
{
const int start = 1; //nodul de la care plecam
for(int i = 1; i <= n; ++i)
dp[i] = INF;
set<pair<int, int> > q;
dp[start] = 0;
q.insert(make_pair(0, start));
pair<int, int> p;
int current, cost;
while(q.empty() == false)
{
p = *q.begin();
q.erase(p);
current = p.second;
if(viz[current])
continue;
cost = p.first;
viz[current] = true;
for(auto &v:vecini[current])
if(dp[v.ind] > cost + v.cost)
{
dp[v.ind] = cost + v.cost;
q.insert(make_pair(dp[v.ind], v.ind));
}
}
}
void afisare()
{
ofstream out("dijkstra.out");
for(int i = 2; i <= n; ++i)
{
if(dp[i] == INF)
out << 0 << " ";
else
out << dp[i] << " ";
}
out.close();
}
int main()
{
citire();
rezolvare();
afisare();
return 0;
}