Cod sursa(job #2424024)

Utilizator alexandradonici99@yahoo.comAlexandra Donici [email protected] Data 22 mai 2019 15:13:10
Problema Algoritmul Bellman-Ford Scor 35
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.64 kb
#include <iostream>
#include <climits>
#include <fstream>
#include <list>
#include <vector>
#include <set>

using namespace std;
#define inf INT_MAX/2
ifstream fin("bellmanford.in");
ofstream fout("bellmanford.out");

void citire(list <pair <int,int> > * &L,int &n,int &m)
{
    fin>>n>>m;
    L=new list<pair<int,int> >[n+1];
    int x,y,p;
    for(int i=0;i<m;i++)
    {
        fin>>x>>y>>p;
        L[x].push_back({p,y});
       // L[y].push_back({p,x});
    }

}

void initializare(vector <int> &t,vector <int> &d, int n)
{
    t.resize(n+1);
    d.resize(n+1);
    for(int i=1;i<=n;i++)
    {
        t[i]=0;
        d[i]=inf;

    }

    d[1]=0;

}

void Bellman(list <pair <int,int> > *L,int n,int m,vector <int> &t,vector <int> &d,int &ok)
{

    initializare(t,d,n);


    vector <int > s(n+1,0);
ok=1;
    int i,k;
for(k=1;k<=n-1;k++)
for(i=1;i<=n;i++)
        for(auto pr: L[i])
        {
            int y=pr.second;
            int p=pr.first;

            if(d[i]!=inf && d[y]>d[i]+p)
            {
                d[y]=d[i]+p;
                t[y]=i;

            }
        }
for(i=1;i<=n;i++)
        for(auto pr: L[i])
        {
            int y=pr.second;
            int p=pr.first;

            if(d[i]!=inf && d[y]>d[i]+p)
            {
                ok=0;

            }
        }

if(ok==0)
    fout<<"Ciclu negativ!";
else
    for(int i=2;i<=n;i++)
    {
        fout<<d[i]<<' ';
    }

}

int main()
{
    list <pair <int,int> > *L;
    int n,m,st,ok;
    vector <int> t;
    vector <int> d;
    citire(L,n,m);

    Bellman(L,n,m,t,d,ok);
    return 0;
}