Pagini recente » Cod sursa (job #2652463) | Cod sursa (job #3003716) | Cod sursa (job #2609309) | Cod sursa (job #3144264) | Cod sursa (job #2539164)
#include <fstream>
#define INFINITE 1000000
using namespace std;
ifstream in("dijkstra.in");
ofstream out("dijkstra.out");
int n, node_start, x, y, val, mat[50001][50001], viz[50001], d[50001];
void dijkstra(int p) {
for(int i = 1; i <= n; ++i) {
d[i] = mat[p][i];
}
d[0] = INFINITE;
viz[p] = 1;
for(int k = 1; k < n; ++k) {
int pmax = 0;
for(int i = 1; i <= n; ++i)
if(!viz[i] && d[i] < d[pmax])
pmax = i;
if(pmax > -1) {
viz[pmax] = 1;
for(int i = 1; i <= n; ++i)
if(!viz[i] && d[i] > d[pmax] + mat[pmax][i])
d[i] = d[pmax] + mat[pmax][i];
}
}
for(int i = 1; i <= n; ++i)
if(d[i] == INFINITE)
out << -1 << ' ';
else
out << d[i] << ' ';
}
int main() {
in >> n >> node_start;
for(int i = 1; i <= n; ++i){
for(int j = 1; j <= n; ++j)
mat[i][j] = INFINITE;
mat[i][i] = 0;
}
while(in >> x >> y >> val) {
mat[x][y] = val;
}
dijkstra(node_start);
return 0;
}