Pagini recente » Cod sursa (job #3283249) | Cod sursa (job #2478751) | Cod sursa (job #1599038) | Cod sursa (job #2838880) | Cod sursa (job #1373286)
#include <fstream>
#include <vector>
#define NMAX 50010
using namespace std;
const int oo = 2000000000;
int Distance[NMAX],N,M;
bool Selected[NMAX];
ifstream f("dijkstra.in");
ofstream g("dijkstra.out");
vector< pair<int, int> > G[NMAX];
void init(){
for (int i = 2; i <= N; i++) {
Distance[i] = oo;
}
}
void Read(){
f>>N>>M;
int x,y,c;
for (int i = 1; i <= M; i++) {
f>>x>>y>>c;
G[x].push_back(make_pair(y, c));
}
}
void Dijkstra(){
for (int i = 1 ; i <= N; i++) {
int Nod,Min = oo;
for (int j = 1; j <= N; j++) {
if (Distance[j] < Min && Selected[j] == false) {
Min = Distance[j];
Nod = j;
}
}
Selected[Nod] = true;
for (int k = 0; k < G[Nod].size(); k++) {
int Vecin = G[Nod][k].first, Cost = G[Nod][k].second;
Distance[Vecin] = min(Distance[Vecin], Distance[Nod] + Cost);
}
}
}
void Write(){
for (int i = 2; i <= N; i++) {
if (Distance[i] == 2000000000) {
g<<0<<" ";
}else{
g<<Distance[i]<<" ";
}
}
}
int main()
{
Read();
init();
Dijkstra();
Write();
return 0;
}