Pagini recente » Cod sursa (job #420772) | Cod sursa (job #1826723) | Cod sursa (job #1766756) | Cod sursa (job #2432248) | Cod sursa (job #1564246)
#include <stdio.h>
#include <vector>
#include <set>
#include <cstring>
#define N_MAX 50003
#define M_MAX 250003
#define INFINIT 999999
using namespace std;
FILE *f, *g;
int n, m;
int d[N_MAX];
const int START = 1;
vector<int> v[N_MAX];
vector<int> cost[N_MAX];
set< pair<int, int> > lista;
inline void citire();
void Dijkstra(int);
inline void afisare();
int main()
{
citire();
Dijkstra(START);
afisare();
fclose(f);
fclose(g);
return 0;
}
inline void citire(){
f = fopen("dijkstra.in", "r");
g = fopen("dijkstra.out", "w");
fscanf(f, "%d %d\n", &n, &m);
int x, y;
int c;
for (int i = 1; i <= m; ++i){
fscanf(f, "%d %d %d\n", &x, &y, &c);
v[x].push_back(y);
cost[x].push_back(c);
}
}
void Dijkstra(int start){
int nod;
int c;
int i;
int v_size;
lista.insert(make_pair(0, start));
memset(d, INFINIT, sizeof(d));
d[start] = 0;
while (!lista.empty()){
c = lista.begin()->first;
nod = lista.begin()->second;
lista.erase(lista.begin());
v_size = v[nod].size();
for (i = 0; i < v_size; ++i){
if (d[v[nod][i]] > c + cost[nod][i]){
d[v[nod][i]] = c + cost[nod][i];
lista.insert(make_pair(d[v[nod][i]], v[nod][i]));
}
}
}
}
inline void afisare(){
for (int i = 2; i <= n; ++i){
fprintf(g, "%d ", d[i]);
}
fprintf(g, "\n");
}