Pagini recente » Cod sursa (job #1014175) | Cod sursa (job #1674545) | Cod sursa (job #617698) | Cod sursa (job #1320708) | Cod sursa (job #2803017)
#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 <int, vector<int>, greater<int>> Coada;
bool Vizitat[dijMax];
for(int i = 1; i <= NrNoduri; i++)
distanta[i] = INT_MAX;
distanta[nod] = 0;
Coada.push(nod);
Vizitat[nod] = 1;
while(!Coada.empty())
{
int nodCurent = Coada.top();
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(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;
}