Pagini recente » Cod sursa (job #2284514) | Cod sursa (job #679986) | Cod sursa (job #1662267) | Cod sursa (job #857791) | Cod sursa (job #2298539)
#include <bits/stdc++.h>
using namespace std;
int viz[100000],n,m,i,x,y,c,d[100000],nrviz[100000];
priority_queue < int, vector<int>, greater<int> > pq;
vector < pair<int,int> > G[100000];
int inf=2000000000;
ifstream f("bellmanford.in");
ofstream g("bellmanford.out");
bool bellmanford(int S)
{
int i;
for(i=1;i<=n;i++)
d[i]=inf;
d[S]=0;
pq.push(S);
viz[S]=1;
while(!pq.empty())
{
int nod=pq.top();
pq.pop();
nrviz[nod]++;
if(nrviz[nod]>=n)
return false;
viz[nod]=0;
for(auto& it : G[nod])
{
int nc=it.first;
int cost=it.second;
if(d[nod] + cost < d[nc])
{
d[nc] = d[nod] + cost;
if(viz[nc]==0)
{
pq.push(nc);
viz[nc]=1;
}
}
}
}
return true;
}
int main()
{
f>>n>>m;
for(i=1;i<=m;i++)
{
f>>x>>y>>c;
G[x].push_back(make_pair(y,c));
}
if(bellmanford(1))
{
for(i=2;i<=n;i++)
{
if(d[i]!=inf)
g<<d[i]<<" ";
else g<<-1<<" ";
}
}
else
g<<"Ciclu negativ!";
f.close();
g.close();
return 0;
}