Pagini recente » Cod sursa (job #1429243) | Cod sursa (job #2529603) | Cod sursa (job #2622586) | Cod sursa (job #156416) | Cod sursa (job #714297)
Cod sursa(job #714297)
#include <cstdio>
#include <vector>
#include <queue>
//sursa lui teo, verific daca e de 100.. ca numi vad greseala la sursa mea
#define N 50001
#define I 999999999
using namespace std;
struct nod
{
int v;
int c;
};
int n;
int d[N];
struct cmp
{
bool operator () (const int &a, const int &b) const
{
return d[a] > d[b];
}
};
vector < nod > g[N];
priority_queue < int, vector < int >, cmp> q;
void citire()
{
freopen ("dijkstra.in", "r", stdin);
int m;
scanf ("%d %d ", &n, &m);
while (m --)
{
int v;
nod a;
scanf ("%d %d %d ", &v, &a.v, &a.c);
g[v].push_back (a);
}
}
void dijkstra(int vf)
{
for (int i = 1; i <= n; d[i] = I, ++ i);
d[vf] = 0;
q.push (vf);
while (!q.empty())
{
int v = q.top();
q.pop();
unsigned int m = g[v].size();
for (unsigned int i = 0; i < m; ++ i)
{
nod aux = g[v][i];
if (d[v] + aux.c < d[aux.v])
{
d[aux.v] = d[v] + aux.c;
q.push (aux.v);
}
}
}
}
void afisare()
{
freopen ("dijkstra.out", "w", stdout);
for (int i = 2; i <= n; ++ i)
if (d[i] == I)
printf ("0 ");
else
printf ("%d ", d[i]);
printf ("\n");
}
int main()
{
citire();
dijkstra(1);
afisare();
return 0;
}