Pagini recente » Cod sursa (job #2071805) | Cod sursa (job #1041541) | Cod sursa (job #1904808) | Cod sursa (job #2502430) | Cod sursa (job #1348938)
#include <fstream>
using namespace std;
ifstream in("dijkstra.in");
ofstream out("dijkstra.out");
#define N 50001
#define inf (1<<30)
struct graf{
int cost, nod;
graf *next; } *A[N];
int d[N], n, m, a, b, c;
bool viz[N];
void add(int a, int b, int c)
{
graf *q = new graf;
q->cost = c;
q->nod = b;
q->next = A[a];
A[a] = q;
}
void citire()
{
in >> n >> m;
for(int i=1;i<=m;i++)
in >> a >> b >> c, add(a,b,c);
}
void dij()
{
int min = inf, poz;
for(int i=2;i<=n;i++)
d[i] = inf;
for(int i=1;i<=n-1;i++)
{
min = inf;
for(int j=1;j<=n;j++)
if(!viz[j] && d[j]<min)
min = d[j], poz = j;
viz[poz] = 1;
graf *varf = A[poz];
while(varf)
{
if(d[varf->nod] > d[poz] + varf->cost )
d[varf->nod] = d[poz] + varf->cost;
varf = varf->next;
}
}
}
void afisare()
{
for(int i=2;i<=n;i++)
out << (d[i] == inf ? 0:d[i]) << " ";
}
int main()
{
citire();
dij();
afisare();
in.close();
out.close();
return 0;
}