Pagini recente » Cod sursa (job #548995) | Cod sursa (job #1380209) | Cod sursa (job #216589) | Cod sursa (job #174354) | Cod sursa (job #852872)
Cod sursa(job #852872)
#include <fstream>
#define NMax 50003
#define inf 1000000000
using namespace std;
ifstream f("dijkstra.in");
ofstream g("dijkstra.out");
struct Nod
{
int nod, cost;
Nod *next;
};
int n, m,x,y,costul;
Nod *Vecin[NMax];
int d[NMax], S[NMax];
void adauga(int x, int y, int costul)
{
Nod *q = new Nod;
q->nod = y;
q->cost = costul;
q->next = Vecin[x];
Vecin[x] = q;
}
void dijkstra() // O(n*n) clasic
{
for ( int i = 2; i <= n; i++ ) d[i] = inf;
int mini, pmin = 0;
for ( int i = 1; i <= n; i++ )
{
mini = inf;
for ( int j = 1; j <= n; j++ )
if ( d[j] < mini && !S[j] ) {mini = d[j]; pmin = j;}
S[pmin] = 1;
Nod *t = Vecin[pmin];
while ( t )
{
if ( d[ t->nod ] > d[pmin] + t->cost )
d[ t->nod ] = d[pmin] + t->cost;
t = t->next;
}
}
}
int main()
{
f>>n>>m;
for ( int i = 1; i <= m; i++ )
{
f>>x>>y>>costul;
adauga(x, y, costul);
}
dijkstra();
for ( int i = 2; i <= n; i++ )
if(d[i] == inf) g<<0<<" ";else g<< d[i]<<" ";
g<<'\n';
return 0;
}