Pagini recente » Cod sursa (job #1351795) | Cod sursa (job #557137) | Cod sursa (job #960590) | Clasament iconcurs5 | Cod sursa (job #1599785)
#include <iostream>
#include <fstream>
#include <vector>
#include <set>
#include <utility>
using namespace std;
ifstream fin ("dijkstra.in");
ofstream fout ("dijkstra.out");
#define MAXN 50050
#define INFTY 9999999
vector < vector < pair <int,int> > > edge;
set < pair <int, int> > solution;
vector <int> Gdistance;
int N, M;
void Djikstra(int node)
{
for (int i = 0; i < node; ++i)
Gdistance[i] = INFTY;
for (int i = node+1; i <= N; ++i)
Gdistance[i] = INFTY;
solution.insert(make_pair(node, 0));
while (!solution.empty())
{
pair <int, int> top = *solution.begin();
node = top.first;
int cost = top.second;
solution.erase(top);
for (int i = 0; i < edge[node].size(); ++i)
if (Gdistance[edge[node][i].first] > cost + edge[node][i].second)
{
Gdistance[edge[node][i].first] = cost + edge[node][i].second;
solution.insert(make_pair(edge[node][i].first,
Gdistance[edge[node][i].first]));
}
}
}
int main()
{
fin >>N >>M;
edge.resize(N+1);
Gdistance.resize(N+1);
for (int i = 1; i <= M; ++i)
{
int x, y, c;
fin >>x >>y >>c;
edge[x].push_back(make_pair(y,c));
}
Djikstra(1);
for (int i = 2; i <= N; ++i)
if (Gdistance[i] != INFTY)
fout <<Gdistance[i] <<' ';
else
fout <<0 <<' ' ;
return 0;
}