Pagini recente » Cod sursa (job #2037037) | Cod sursa (job #291592) | Cod sursa (job #2353560) | Cod sursa (job #197683) | Cod sursa (job #2475649)
#include<bits/stdc++.h>
#define maxn 50010
#define INF INT_MAX-1
using namespace std;
ifstream fin("bellmanford.in");
ofstream fout("bellmanford.out");
int n,m;
vector <pair <int,int > > lista[maxn];
bool incoada[maxn];
int D[maxn],v[maxn];
queue <int> coada;
void citire()
{
fin>>n>>m;
int x,y,c;
for(int i=1;i<=m;i++)
{
fin>>x>>y>>c;
lista[x].push_back({y,c});
}
}
bool Bellman(int nod)
{
for(int i=1;i<=n;i++)
{
v[i]=0;
D[i]=INF;
}
D[nod]=0;
coada.push(nod);
incoada[nod]=true;
while(!coada.empty())
{
int nod_curr=coada.front();
v[nod_curr]++;
if(v[nod_curr]>n)
return false;
coada.pop();
incoada[nod_curr]=false;
for(size_t i=0;i<lista[nod_curr].size();i++)
{
int vecin=lista[nod_curr][i].first;
int cost=lista[nod_curr][i].second;
if(D[nod_curr]+cost<D[vecin])
{
D[vecin]=D[nod_curr]+cost;
if(!incoada[vecin])
{
coada.push(vecin);
incoada[vecin]=true;
}
}
}
}
return true;
}
void afisare()
{
for(int i=2;i<=n;i++)
fout<<D[i]<<" ";
}
int main()
{
citire();
if(Bellman(1))
afisare();
else
fout<<"Ciclu negativ!";
return 0;
}