Pagini recente » Cod sursa (job #758559) | Cod sursa (job #1633474) | Cod sursa (job #1766366) | Cod sursa (job #896831) | Cod sursa (job #1243336)
#include<iostream>
#include<fstream>
#include<vector>
#include<queue>
using namespace std;
ifstream fin("dijsktra.in");
ofstream fout("dijsktra.out");
struct cuplu{
int id, cost;
};
struct nod {
bool vizitat;
int cost;
vector<cuplu> vecini;
};
int n, m, i, a, b, c;
nod graf[50001];
queue<int> coada;
void viziteaza(int x) {
vector<cuplu>::iterator it;
for(it = graf[x].vecini.begin(); it < graf[x].vecini.end(); it++) {
cuplu vecin = *it;
if(!graf[vecin.id].vizitat) {
graf[vecin.id].vizitat = true;
graf[vecin.id].cost = graf[x].cost + vecin.cost;
coada.push(vecin.id);
}
else {
if(graf[vecin.id].cost > graf[x].cost + vecin.cost) {
graf[vecin.id].cost = graf[x].cost + vecin.cost;
coada.push(vecin.id);
}
}
}
}
int main() {
fin >> n >> m;
for(i = 0; i < m; i++) {
fin >> a >> b >> c;
cuplu nou;
nou.id = b;
nou.cost = c;
graf[a].vecini.push_back(nou);
}
coada.push(1);
graf[1].vizitat = true;
while(!coada.empty()) {
viziteaza(coada.front());
coada.pop();
}
for(i = 2; i <= n; i++) {
fout << graf[i].cost << ' ';
}
return 0;
}