Pagini recente » Cod sursa (job #324079) | Cod sursa (job #1153583) | Cod sursa (job #2109645) | Cod sursa (job #147263) | Cod sursa (job #1657642)
#include <iostream>
#include <fstream>
#include <queue>
using namespace std;
ifstream in("dijkstra.in");
ofstream out("dijkstra.out");
const int N_max = 50002;
const int INF = 250000005;
vector < pair <int, int> > graph[N_max];
int dmin[N_max];
class cmp
{
public:
bool operator () (int x, int y) const
{ return dmin[x] > dmin[y]; }
};
priority_queue < int, vector<int>, cmp > H;
int N, M;
void read()
{
int x, y, c;
in >> N >> M;
for(int i = 1; i <= M; i++)
{
in >> x >> y >> c;
// GRAF ORIENTAT
graph[x].push_back( make_pair(y, c) );
}
}
void dijkstra(int node)
{
int i, x, y, cost;
for(i = 1; i <= N; i++) dmin[i] = INF;
// INSEREZ NODUL DE START
H.push(node);
dmin[node] = 0;
while( !H.empty() )
{
x = H.top();
H.pop();
for(i = 0; i < graph[x].size(); i++)
{
y = graph[x][i].first;
cost = graph[x][i].second;
if(dmin[y] > dmin[x] + cost)
{
dmin[y] = dmin[x] + cost;
H.push(y);
}
}
}
}
void write()
{
for(int i = 2; i <= N; i++) out << dmin[i] << " ";
}
int main()
{
read();
dijkstra(1);
write();
return 0;
}