Cod sursa(job #894996)

Utilizator RadEmanuelRad Emanuel RadEmanuel Data 27 februarie 2013 09:02:37
Problema Algoritmul Bellman-Ford Scor 35
Compilator cpp Status done
Runda Arhiva educationala Marime 1.03 kb
#include<cstdio>
#include<list>
#include<vector>
#define inf 210000
using namespace std;
FILE *fin= fopen("bellmanford.in", "r");
FILE *fout=fopen("bellmanford.out","w");
int i,j,n,m,c,d[50001];
struct nod
{
    int cost,nr;
}p;
list<nod> lista;
list<nod>:: iterator it;
vector< list<nod> > l(50001,lista);

int minimize()
{
    int ok=0;
    for(int j=1;j<=n;++j)
        for(it=l[j].begin();it!=l[j].end();++it)
            if(d[it->nr]>d[j]+it->cost)
            {
                ok=1;
                d[it->nr]=d[j]+it->cost;
            }
    return ok;
}

int main()
{
    fscanf(fin,"%d%d",&n,&m);
    for(int ii=1;ii<=m;++ii)
    {
        fscanf(fin,"%d%d%d",&i,&j,&c);
        nod p;
        p.nr=j; p.cost=c;
        l[i].push_back(p);
    }
    for(i=2;i<=n;++i)
        d[i]=inf;
    for(i=1;i<=n-1;++i)
        minimize();
    int ok=minimize();
    if(ok)
        fprintf(fout,"Ciclu negativ!");
    else
        for(i=2;i<=n;++i)
            fprintf(fout,"%d ",d[i]);
    return 0;
}