Pagini recente » Profil marius0072 | Istoria paginii utilizator/bittick | Istoria paginii utilizator/rebyter | Diferente pentru problema/peapesimaitulburi intre reviziile 16 si 15 | Cod sursa (job #1036298)
#include <cstdio>
int t[250000],d[250000],a[1000][1000],n,m,r,inf=2000000,S[100],min;
void citire();
void dijkstra();
void afisare();
int main ()
{
freopen("dijkstra.in","r",stdin);
freopen("dijkstra.out","w",stdout);
citire();
dijkstra();
afisare();
}
void citire ()
{
int x,y,z,i,j;
scanf("%ld%ld",&n,&m);
r=1;
for(i=1;i<=n;i++)
for(j=i+1;j<=n;j++)
a[i][j]=a[j][i]=inf;
for(i=1;i<=m;i++)
{
scanf("%ld%ld%ld",&x,&y,&z);
a[x][y]=z;
}
for(i=1;i<=n;i++)
{
d[i]=a[r][i];
if(i!=r)
t[i]=r;
}
S[r]=1;
}
void dijkstra()
{
int i,j,jm;
for(i=2;i<=n;i++)
{
min=inf;
for(j=1;j<=n;j++)
if(!S[j] && d[j]<min)
{
min=d[j];
jm=j;
}
if(min<inf)
{
S[jm]=1;
for(j=1;j<=n;j++)
if(S[j]==0 && d[j]>d[jm]+a[jm][j])
{
d[j]=d[jm]+a[jm][j];
t[j]=jm;
}
}
}
}
void afisare()
{
int i;
for(i=1;i<=n;i++)
if(i!=r && d[i]<inf)
{
printf("%ld ",d[i]);
}
}