Pagini recente » Cod sursa (job #2279555) | Cod sursa (job #2640932) | Cod sursa (job #236739) | Cod sursa (job #2254938) | Cod sursa (job #337748)
Cod sursa(job #337748)
#include <stdio.h>
typedef long matrice[50000][50000];
const infinit=2000;
matrice a;
long n, m, i, j, r, cost, inf, min, poz, t[50000], s[50000], d[50000];
int main()
{
freopen("dijkstra.in","r",stdin);
freopen("dijkstra.out","w",stdout);
scanf("%ld %ld\n",&n,&m);
for (i=1; i<=n; i++)
for (j=1; j<=n; j++)
if (i!=j) a[i][j]=infinit;
for (int k=1; k<=m; ++k)
{
scanf("%ld%ld%ld",&i,&j,&cost);
a[i][j]=cost;
}
r=1;
s[r]=1;
for (i=1; i<=n; ++i)
{
d[i]=a[r][i];
if (i!=r)
if (d[i]<infinit) t[i]=r;
}
for (i=1; i<=n-1; ++i)
{
min=infinit;
for (j=1; j<=n; ++j)
if (s[j]==0)
if (d[j]<min)
{
min=d[j];
poz=j;
}
s[poz]=1;
for (j=1; j<=n; ++j)
if (s[j]==0)
if (d[j]>d[poz]+a[poz][j])
{
d[j]=d[poz]+a[poz][j];
t[j]=poz;
}
}
for (i=2; i<=n; ++i)
{
if (d[i]!=2000) printf("%ld ",d[i]);
else printf("0 ");
}
return 0;
}