Cod sursa(job #805301)

Utilizator RaduDoStochitoiu Radu RaduDo Data 31 octombrie 2012 09:04:20
Problema Algoritmul lui Dijkstra Scor 10
Compilator cpp Status done
Runda Arhiva educationala Marime 1.19 kb
#include<cstdio>
#define INF 0x3f3f3f3f
#define maxn 2005
#include<bitset>
using namespace std;
bitset <maxn> viz[maxn];
bitset <maxn> v;
short a[maxn][maxn],p[maxn];
int d[maxn],n,m,i,j,x,y,c,k,x0,mini,e_nod;
int main()
{
    freopen("dijkstra.in","r",stdin);
    freopen("dijkstra.out","w",stdout);
    scanf("%d%d",&n,&m);
    for(;m>0;--m)
    {
        scanf("%d%d%d",&x,&y,&c);
        a[x][y]=c;
        viz[x][y]=1;
    }
    for(i=1;i<=n;++i)
        for(j=1;j<=n;++j)
            if(viz[i][j]==0)
                a[i][j]=INF;
    x0=1;
    for(i=1;i<=n;++i)
    {
        d[i]=a[x0][i];
        if(d[i]!=INF)
            p[i]=x0;
    }
    v[x0]=1;    e_nod=1;
    while(e_nod)
    {
        mini=INF;
        for(i=1;i<=n;++i)
            if(d[i]<mini&&v[i]==0)
                mini=d[i],k=i;
        if(mini!=INF)
        {
            v[k]=1;
            for(i=1;i<=n;++i)
                if(d[k]+a[k][i]<d[i])
                {
                    d[i]=d[k]+a[k][i];
                    p[i]=k;
                }
        }
        else
            e_nod=0;
    }

    for(i=2;i<=n;++i)
        printf("%d ",d[i]);
    printf("\n");
    return 0;
}