Pagini recente » Cod sursa (job #1890389) | Cod sursa (job #548322) | Cod sursa (job #2094878) | Cod sursa (job #1831311) | Cod sursa (job #679484)
Cod sursa(job #679484)
#include <fstream>
using namespace std;
ifstream f("dijkstra.in");
ofstream g("dijkstra.out");
#include <climits>
int i,j,n,m,col[50005],pi[50005],coada[50005],in=1,sf=0,acum,k,q;
struct nod{
int x,cost;
nod*urm;
}*Z[50005],*p;
int main()
{
int a,b,c;
f>>n>>m;
for(i=1;i<=m;i++)
{
f>>a>>b>>c;
p = new nod;
p->x = a;
p->cost = c;
p->urm = Z[b];
Z[b] = p;
p=new nod;
p->x = b;
p->cost = c;
p->urm = Z[a];
Z[a] = p;
}
p = Z[1];
pi[1]=0;
col[1]=2;
int ok=0;
while(p)
{
k = p->x;
pi[k] = p->cost;
coada[++sf] = k;
col[k]=1;
p=p->urm;
}
while(in<=sf)
{
ok=0;
acum = coada[in];
p = Z[acum];
while(p)
{
q=p->x;
if(col[q]==2 && pi[q] > pi[acum] + p->cost)
{
ok=1;
coada[in] = q;
pi[q] = pi[acum] + p->cost;
col[q]=1;
}
if(col[q]==0)
{
coada[++sf] = q;
pi[q] = pi[acum] + p->cost;
col[q]=1;
}
else
if(col[q]==1 && pi[q] > pi[acum] + p->cost)
pi[q] = pi[acum] + p->cost;
p=p->urm;
}
col[acum]=2;
if(ok==0)
in++;
}
for(i=2;i<=n;i++)
g<<pi[i]<<' ';
f.close();
g.close();
return 0;
}