Pagini recente » Cod sursa (job #2329701) | Cod sursa (job #2382019) | Cod sursa (job #1317732) | Cod sursa (job #2825260) | Cod sursa (job #2716904)
#include <iostream>
#include <fstream>
#include <algorithm>
#include <vector>
#include <queue>
#define NMAX 50005
#define inf 1000000000
using namespace std;
ifstream f("dijkstra.in");
ofstream g("dijkstra.out");
int N,M,D[NMAX];
bool viz[NMAX];
struct Compare{
bool operator()(int x, int y)
{
return (D[x] < D[y]);
}
};
vector < pair <int,int> > G[NMAX];
priority_queue <int , vector <int> ,Compare> Coada;
void citire()
{
f>>N>>M;
for(int i=1;i<=M;i++)
{
int a,b,c;
f>>a>>b>>c;
G[a].push_back(make_pair(b,c));
}
}
void Dijkstra(int v)
{
for(int i=1;i<=N;i++)
D[i]=inf;
D[v]=0;
Coada.push(v);
viz[v]=true;
while(!Coada.empty())
{
v = Coada.top();
Coada.pop();
viz[v]=false;
for(unsigned int i=0;i<G[v].size();i++)
{
int Vecin = G[v][i].first;
int Cost = G[v][i].second;
if(D[Vecin] > D[v] + Cost)
{
D[Vecin] = D[v]+ Cost;
if(!viz[Vecin])
{
Coada.push(Vecin);
viz[Vecin] = true;
}
}
}
}
}
int main()
{
citire();
Dijkstra(1);
for(int i=2;i<=N;i++)
if(D[i]!=inf)
g<<D[i]<<" ";
return 0;
}