Cod sursa(job #962320)

Utilizator timicsIoana Tamas timics Data 14 iunie 2013 16:21:25
Problema Algoritmul Bellman-Ford Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.09 kb
#include<stdio.h>
#include<vector>
#include<deque>
#define inf 1000000000
using namespace std;
int M,N,x,y,c,dist[55000],nb[55000];
deque<int> d;

struct muchie
{
    int nod;
    int cost;
} m;

vector<muchie> a[55000];

int main()
{
    freopen("bellmanford.in","r",stdin);
    freopen("bellmanford.out","w",stdout);
    scanf("%d%d",&N,&M);
    for(int i=1;i<=M;++i)
    {
        scanf("%d%d%d",&x,&y,&c);
        m.nod=y;
        m.cost=c;
        a[x].push_back(m);
    }

    for(int i=2;i<=N;++i)
        dist[i]=inf;

    d.push_back(1);

    while(d.empty()==0)
    {
        x=d.front();
        d.pop_front();
        ++nb[x];
        if(nb[x]>N)
        {
            printf("Ciclu negativ!");
            return 0;
        }
        y=a[x].size();
        for(int i=0;i<y;++i)
            if(dist[x]+a[x][i].cost < dist[a[x][i].nod])
            {
                dist[a[x][i].nod]=dist[x]+a[x][i].cost;
                d.push_back(a[x][i].nod);
            }
    }

    for(int i=2;i<=N;++i)
        printf("%d ",dist[i]);
    return 0;
}