Pagini recente » Cod sursa (job #2854598) | Cod sursa (job #2246787) | Cod sursa (job #2681841) | Cod sursa (job #1570603) | Cod sursa (job #573969)
Cod sursa(job #573969)
#include <fstream.h>
ifstream f("dijkstra.in");
ofstream g("dijkstra.out");
long long n,m,min;
int viz[250001],cost[250001];
struct nod{
int nr,co;
nod *urm;
} *A[100],*p;
void adauga(int a, int b, int c)
{
p=new nod;
p->nr=b;
p->co=c;
p->urm=A[a];
A[a]=p;
}
void afis()
{
for(int i=2;i<=n;i++)
g<<cost[i]<<' ';
g<<'\n';
}
void dijkstra(int s)
{
int i,j;
viz[s]=1;
p=A[s];
while(p)
cost[p->nr]=p->co,p=p->urm;
for(i=2;i<n;i++)
{
min=1;
while(viz[min] || !cost[min]) min++;
for(j=min+1;j<=n;j++)
if(!viz[j] && cost[j] && cost[j] < cost[min]) min=j;
viz[min]=1;
p=A[min];
while(p)
{
if((!cost[p->nr] || cost[p->nr] > cost[min] + p->co)&&!viz[p->nr])
cost[p->nr] = cost[min]+p->co;
p=p->urm;
}
}
}
int main()
{
int a,b,c,i;
f>>n>>m;
for(i=1;i<=m;i++)
{
f>>a>>b>>c;
adauga(a,b,c);
}
dijkstra(1);
afis();
f.close();
g.close();
return 0;
}