Pagini recente » Cod sursa (job #2649914) | Cod sursa (job #885993) | Cod sursa (job #945158) | Cod sursa (job #33865) | Cod sursa (job #2803024)
#include <bits/stdc++.h>
using namespace std;
ifstream in("dijkstra.in");
ofstream out("dijkstra.out");
const int dijMax = 50001;
class Graf
{
int NrNoduri;
public:
Graf(int NrNoduri);
void Dijkstra(int nod, vector <pair<int, int>>G[dijMax]);
};
Graf::Graf(int NrNoduri)
{
this->NrNoduri = NrNoduri;
}
void Graf::Dijkstra(int nod, vector <pair<int, int>>G[dijMax])
{
int distanta[dijMax];
priority_queue <pair<int, int>, vector <pair<int,int>>, greater<pair<int,int>>> Coada;
bool Vizitat[dijMax];
for(int i = 1; i <= NrNoduri; i++)
distanta[i] = INT_MAX;
distanta[nod] = 0;
Coada.push(make_pair(distanta[nod], nod));
Vizitat[nod] = 1;
while(!Coada.empty())
{
int nodCurent = Coada.top().second;
Coada.pop();
Vizitat[nodCurent] = 0;
for(int i = 0; i < G[nodCurent].size(); i++)
{
int Vecin = G[nodCurent][i].first;
int Cost = G[nodCurent][i].second;
if(distanta[nodCurent] + Cost < distanta[Vecin])
{
distanta[Vecin] = distanta[nodCurent] + Cost;
if(!Vizitat[Vecin])
{
Coada.push(make_pair(distanta[Vecin], Vecin));
Vizitat[Vecin] = 1;
}
}
}
}
for(int i = 2; i <= NrNoduri; i++)
if(distanta[i] != INT_MAX)
out << distanta[i] << " ";
else
out << 0 <<" ";
}
int main()
{
int N, M;
in >> N >> M;
int nod1, nod2, cost;
vector <pair<int, int>>G[dijMax];
for(int i = 0; i < M; i++)
{
in >> nod1 >> nod2 >> cost;
G[nod1].push_back(make_pair(nod2, cost));
}
Graf g(N);
g.Dijkstra(1, G);
return 0;
}