Pagini recente » Cod sursa (job #2676391) | Cod sursa (job #2821507) | Cod sursa (job #1408379) | Cod sursa (job #544315) | Cod sursa (job #1541580)
#include <cstdio>
#include <vector>
#include <queue>
using std::vector;
using std::queue;
const int MAX_N = 50000;
struct Muchie {
int nod;
int cost;
};
int V, E;
vector<Muchie> vecini[1 + MAX_N];
queue<int> coadaBF;
bool inCoadaBF[1 + MAX_N];
int distanta[1 + MAX_N];
int main(void) {
freopen("dijkstra.in", "r", stdin);
freopen("dijkstra.out", "w", stdout);
int i;
// citirea datelor
scanf("%d %d", &V, &E);
for (i = 0; i < E; ++i) {
int u, v, c;
scanf("%d %d %d", &u, &v, &c);
vecini[u].push_back({v, c});
}
// calcularea solutiei
int sursa = 1;
coadaBF.push(sursa);
inCoadaBF[sursa] = true;
for (i = 1; i <= V; i++) {
distanta[i] = 0x3fffffff;
}
distanta[sursa] = 0;
while (!coadaBF.empty()) {
int nod = coadaBF.front();
coadaBF.pop();
inCoadaBF[nod] = false;
//for (i = 0; i < vecini[nod].size(); i++) {
// Muchie muchie = vecini[nod][i];
for (Muchie muchie : vecini[nod]) {
if (distanta[muchie.nod] > distanta[nod] + muchie.cost) {
distanta[muchie.nod] = distanta[nod] + muchie.cost;
if (!inCoadaBF[muchie.nod]) {
coadaBF.push(muchie.nod);
inCoadaBF[muchie.nod] = true;
}
}
}
}
// afisarea solutiei
for (i = 2; i <= V; i++) {
printf("%d ", distanta[i]);
}
printf("\n");
return 0;
}