Pagini recente » Cod sursa (job #1908660) | Rating Petrenco Elena (petrenco_elena) | Cod sursa (job #138794) | Cod sursa (job #2616560) | Cod sursa (job #2424028)
#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(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;
}