Cod sursa(job #1533294)

Utilizator cristinelulCristian Virga cristinelul Data 22 noiembrie 2015 12:58:51
Problema Algoritmul Bellman-Ford Scor 15
Compilator cpp Status done
Runda Arhiva educationala Marime 1.35 kb
#include <fstream>
#include <vector>

using namespace std;

ifstream fin("bellmanford.in");
ofstream fout("bellmanford.out");

struct data
{
    int val,nod;
};
int n,m,minim[50001],viz[50001],ok;
vector<data> ma[50001];
void citire()
{
    int i,x,y,c;
    data aux;
    fin>>n>>m;
    for(i=1;i<=m;i++)
    {
        fin>>x>>y>>c;
        aux.val=c;
        aux.nod=y;
        ma[x].push_back(aux);
    }
    minim[1]=0;
    for(i=2;i<=n;i++)
        minim[i]=1000*n;
}
void rezolvare()
{
    int p,u,x,i,c[n+m+5];
    data y;
    p=0;
    u=1;
    c[u]=1;
    while(p<u)
    {
        p++;
        x=c[p];
        viz[x]=0;
        for(i=0;i<ma[x].size();i++)
        {
            y=ma[x][i];
            if(minim[y.nod]>minim[x]+y.val)
            {
                minim[y.nod]=minim[x]+y.val;
                if(viz[y.nod]==0)
                {
                    c[++u]=y.nod;
                    viz[y.nod]=1;
                }
                if(minim[y.nod]>1000*n)
                {
                    ok=1;
                    fout<<"Ciclu negativ!";
                }
            }
        }
    }
}
void afisare()
{
    int i;
    for(i=2;i<=n;i++)
        fout<<minim[i]<<' ';
}
int main()
{
    citire();
    rezolvare();
    if(ok==0)
        afisare();
    fout.close();
    return 0;
}