Pagini recente » Cod sursa (job #482704) | Cod sursa (job #1877864) | Cod sursa (job #2200234) | Cod sursa (job #1182397) | Cod sursa (job #1089565)
#include <iostream>
#include <fstream>
using namespace std;
ifstream in ("dijkstra.in");
ofstream out("dijkstra.out");
const int inf = 1<<30;
const int NMAX = 50001;
const int max_arce=250001;
int coada[max_arce], D[NMAX];
int n,m;
struct lista
{
int v;
int c;
lista *urm;
};
lista *cap[NMAX], *nou;
int distanta(int nod, int i)
{
nou=cap[nod];
while(nou)
{
if(nou->v==i) return nou->c;
nou=nou->urm;
}
return inf;
}
void dijkstra(int ns)
{
int i,pi,ps,nod,v,c;
for(i=1;i<=n;i++)
D[i]=inf;
D[ns]=0;
coada[1]=ns;
pi=1;
ps=1;
while(pi<=ps)
{
nod=coada[pi];
nou=cap[nod];
while(nou)
{
v=nou->v; // vecinii celui de la inceputul cozii
c=nou->c; //costurile legarii vecinilor la primul
if(D[v]>D[nod]+c)
{
D[v]=D[nod]+c;
ps++;
coada[ps]=v;
}
nou=nou->urm;
}
pi++;
}
}
/*
void drum(int x)
{
if (T[x])
{
drum(T[x]);
out<<" "<<x;
}
else out<<x;
}
*/
int main()
{
int i,a,b,c;
in>>n>>m;
for(i=1;i<=n;i++)
cap[i]=NULL;
for(i=1;i<=m;i++)
{
in>>a>>b>>c;
nou=new lista;
nou->v=b;
nou->c=c;
nou->urm=cap[a];
cap[a]=nou;
}
in.close();
/*
for(i=1;i<=n;i++)
{
nou=cap[i];
while(nou!=NULL)
{
out<<nou->v<<" ";
nou=nou->urm;
}
out<<"\n";
}
*/
dijkstra(1);
for(i=2;i<=n;i++)
if(D[i]!=inf) out<<D[i]<<" ";
else out<<0<<" ";
/*
out<<"\n";
for(i=1;i<=n;i++)
out<<T[i]<<" ";
out<<"Drumul pana la 2 ";
drum(2);
*/
return 0;
}