Cod sursa(job #1036297)

Utilizator DemnokStefan Demnok Data 19 noiembrie 2013 10:16:27
Problema Algoritmul lui Dijkstra Scor 10
Compilator cpp Status done
Runda Arhiva educationala Marime 1.26 kb
#include <cstdio>
int t[100],d[100],a[100][100],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]);
        }
}