Pagini recente » Cod sursa (job #1276305) | Cod sursa (job #2188985) | Cod sursa (job #696680) | Cod sursa (job #2048320) | Cod sursa (job #1264646)
// Craciun Catalin
// Infoarena
// Dijkstra
#include <iostream>
#include <fstream>
#include <map>
#include <algorithm>
#include <bitset>
#include <string>
#include <cstring>
#include <cassert>
#include <cstdlib>
using namespace std;
#define inf 1<<30
#define NMax 200005
//#define DBG 1
struct graf {
int cost;
int nod;
graf *next;
graf() {
cost = inf;
next = NULL;
}
};
ifstream f("dijkstra.in");
ofstream g("dijkstra.out");
int n, m;
graf *a[NMax];
int d[NMax];
bool visited[NMax];
void afisare() {
for (int i=2;i<=n;i++) {
if (d[i] == inf)
g<<0<<' ';
else
g<<d[i]<<' ';
}
g<<'\n';
}
void add(int where, int what, int cost) {
graf *aux = new graf;
aux -> nod = what;
aux -> cost = cost;
aux -> next = a[where];
a[where] = aux;
}
void dijkstra() {
for (int i=1;i<=n;i++)
d[i] = inf;
d[1] = 0;
int minim;
int pminim;
for (int i=1;i<=n;i++) {
pminim = 0; minim = inf;
for (int i=1;i<=n;i++) {
if (!visited[i] && minim > d[i]) {
minim = d[i];
pminim = i;
}
}
visited[pminim] = 1;
graf *q = a[pminim];
while (q) {
if (d[q->nod] > d[pminim] + q->cost)
d[q->nod] = d[pminim] + q->cost;
q=q->next;
}
}
}
void read() {
f>>n>>m;
for (int i=1;i<=m;i++) {
int a,b,c; f>>a>>b>>c;
add(a,b,c);
}
}
int main() {
read();
dijkstra();
afisare();
f.close(); g.close();
return 0;
}