Pagini recente » Cod sursa (job #2989574) | Cod sursa (job #678172) | Cod sursa (job #1368973) | Cod sursa (job #771202) | Cod sursa (job #2423707)
#include <iostream>
#include <fstream>
#define NMAX 100100
#define INF 100100
using namespace std;
ifstream f("dijkstra.in");
ofstream g("dijkstra.out");
vector <pair <int,int> > graf[NMAX];
int dist[NMAX];
int viz[NMAX];
struct compara
{
bool operator()(int x,int y)
{
return dist[x]>dist[y];
}
};
priority_queue <int, vector<int>, compara> coada;
void Dijkstra(int nodStart)
{
dist[nodStart] = 0;
coada.push(nodStart);
viz[nodStart] = 1;
while(!coada.empty())
{
int nodCurent = coada.top();
coada.pop();
viz[nodCurent] = 0;
int lim = graf[nodCurent].size();
for(int i = 0; i < lim; i++)
{
int vecin = graf[nodCurent][i].first;
int cost = graf[nodCurent][i].second;
if(dist[nodCurent] + cost < dist[vecin])
{
dist[vecin] = dist[nodCurent] +cost;
if(viz[vecin] == 0)
{
coada.push(vecin);
viz[vecin] = 1;
}
}
}
}
}
int main()
{
int n,m,a,b,c,i;
f>>n>>m;
for(i=1; i<=m; i++)
{
f>>a>>b>>c;
graf[a].push_back(make_pair(b,c));//[ab] = c
}
for(i=1; i<=n; i++)
dist[i] = INF;
Dijkstra(1);
for(i=2; i<=n; i++)
{
if(dist[i] == INF)
g<<0<<" ";
else g<<dist[i]<<" ";
}
return 0;
}