Cod sursa(job #906754)

Utilizator ovidel95Ovidiu ovidel95 Data 7 martie 2013 08:48:46
Problema Algoritmul lui Dijkstra Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.23 kb
#include <cstdio>
#include<cmath>
#define nmax 50001
using namespace std;
int n,d[nmax],l[nmax];
int minim()
{
    int mi,q,pmin;
    mi=1001;
    pmin=0;
    for (q=1;q<=n;q++)
        if (!d[q]&&l[q]<mi)
        {
            pmin=q; mi=l[q];
        }
    return pmin;
}
int main()
{   int m,a[nmax][nmax],i,j;
    freopen("dijkstra.in","r",stdin);
    freopen("dijkstra.out","w",stdout);
    scanf("%d%d",&n,&m);
    for (i=1;i<=n;i++)
        for (j=1;j<=n;j++)
            a[i][j]=1001;

    int e1,e2;
    for (i=1;i<=m;i++)
        {
            scanf("%d%d",&e1,&e2);
            scanf("%d",&a[e1][e2]);
        }
    int f=1,min; d[1]=1;
    for (i=1;i<=m;i++)
        if (a[1][i]!=1001)
            l[i]=a[1][i];
        else l[i]=1001;
    while (f)
    {
        min=minim();
        if (min==0)
            f=0;
        else
        {
            d[min]=1;
            for (i=1;i<=n;i++)
                if (!d[i]&&(l[i]>l[min]+a[min][i]))
                    l[i]=l[min]+a[min][i];
        }
    }
    for (i=2;i<=n;i++)
        {   if (l[i]!=1001)
                printf("%d ",l[i]);
            else printf("%d ",0);
        }
    fclose(stdin);
    fclose(stdout);
    return 0;
}