Cod sursa(job #2768916)

Utilizator BlaugranasEnal Gemaledin Blaugranas Data 12 august 2021 16:25:07
Problema Algoritmul Bellman-Ford Scor 100
Compilator c-64 Status done
Runda Arhiva educationala Marime 0.99 kb
#include<stdio.h>
#include<stdlib.h>
#define N 50001
int m,n,i,k,l,r,d[N],e[7*N],v[N],u[N],*g[N],*h[N],w[N],j,a[5*N],b[5*N],c[5*N];
int main()
{
    freopen("bellmanford.in","r",stdin),freopen("bellmanford.out","w",stdout),scanf("%d%d",&n,&m);
    for(i=1;i<=m;i++)
        scanf("%d%d%d",a+i,b+i,c+i),w[a[i]]++;
    for(i=1;i<=n;w[i++]=0)
        d[i]=N,g[i]=(int*)malloc(4*w[i]),h[i]=(int*)malloc(4*w[i]);
    for(i=1;i<=m;i++)
        g[a[i]][w[a[i]]]=b[i],h[a[i]][w[a[i]]++]=c[i];
    for(k=l=r=d[1]=0,e[r++]=v[1]=1;l<r&&!k;)
        for(i=e[l++],v[i]=j=0;j<w[i]&&!k;j++)
            if(d[g[i][j]]>d[i]+h[i][j])
            {
                d[g[i][j]]=d[i]+h[i][j];
                if(!v[g[i][j]])
                    if(u[g[i][j]]>n)
                        k=1;
                    else
                        e[r++]=g[i][j],v[g[i][j]]=1,u[g[i][j]]++;
            }
    if(k)
        printf("Ciclu negativ!");
    else
        for(i=2;i<=n;i++)
            printf("%d ",d[i]);
}