Pagini recente » Cod sursa (job #2522131) | Cod sursa (job #1802197) | Cod sursa (job #2116038) | Cod sursa (job #1413036) | Cod sursa (job #2081250)
#include <iostream>
#include <fstream>
#include <climits>
#define Nmax 15000
using namespace std;
ifstream in("dijkstra.in");
ofstream out("dijkstra.out");
int n, m;
long long c[Nmax][Nmax], d[Nmax], p[Nmax], v[Nmax];
void citire(){
int x, y, z;
in >> n >> m;
for(int i = 1; i <= n; i++)
for(int j = 1; j <= n; j++)
c[i][j] = LONG_MAX/2;
for(int i = 1; i <= m; i++){
in >> x >> y >> z;
c[x][y] = z;
}
}
int val_min(){
int mi = INT_MAX, z;
for(int i = 1; i <= n; i++)
if(d[i] < mi && v[i] == 0){
mi = d[i];
z = i;
}
return z;
}
void Dijkstra(int x){
v[x] = 1;
for(int i = 1; i <= n; i++){
d[i] = c[x][i];
p[i] = x;
}
for(int k = 1; k <= n-2; k++){
int z = val_min();
v[z] = 1;
for(int i = 1; i <= n; i++){
if(v[i] == 0 && d[z] + c[z][i] < d[i]){
d[i] = d[z] + c[z][i];
p[i] = z;
}
}
}
}
void afisare(){
for(int i = 2; i <= n; i++)
out << d[i] << " ";
}
int main()
{
citire();
Dijkstra(1);
afisare();
return 0;
}