Pagini recente » Cod sursa (job #3266749) | Cod sursa (job #2719698) | Cod sursa (job #870068) | Cod sursa (job #756424) | Cod sursa (job #1649559)
#include <iostream>
#include <fstream>
#include <climits>
#include <set>
#include <vector>
using namespace std;
ifstream in("dijkstra.in");
ofstream out("dijkstra.out");
set < pair < int, int > > T;
vector < int > G[50100], C[50100];
int n, m, d[50100];
void Citire()
{
in >> n >> m;
int x, y, c;
for(int i = 1; i <= m; i++)
{
in >> x >> y >> c;
G[x].push_back(y);
C[x].push_back(c);
}
in.close();
}
void Dijkstra()
{
int i, j, val, x;
for(i = 2; i <= n ;i++)
d[i] = INT_MAX;
T.insert(make_pair(0,1));
while(T.size() > 0)
{
val = (*T.begin()).first;
x = (*T.begin()).second;
T.erase(*T.begin());
for(i = 0; i < G[x].size(); i++)
if(d [ G[x][i] ] > val + C[x][i])
{
d[G[x][i]] = C[x][i] + val;
T.insert(make_pair(d[G[x][i]], G[x][i]));
}
}
}
void Afisare()
{
for (int i = 2; i <= n; i++)
if(d[i] == INT_MAX)
out << 0 << " ";
else
out << d[i] << " ";
}
int main()
{
Citire();
Dijkstra();
Afisare();
in.close();
out.close();
return 0;
}