Pagini recente » Cod sursa (job #2697723) | Cod sursa (job #310378) | Borderou de evaluare (job #1893721) | 6767557 | Cod sursa (job #2505256)
#include<bits/stdc++.h>
using namespace std;
ifstream in("bellmanford.in");
ofstream out("bellmanford.out");
const int NMAX = 50005;
const int inf = 1e9;
struct muchie
{
int node, cost;
};
int n,m,dist[NMAX],cot[NMAX];
muchie z;
bool ciclu;
vector < muchie > v[NMAX];
deque < int > q;
void BellmanFord(const int start_node)
{
int nod,i;
q.push_back(start_node);
for(i = 1 ; i <= n ; i++)
dist[i] = inf;
dist[1] = 0;
while(!q.empty())
{
nod = q.front();
q.pop_front();
for(i = 0 ; i < v[nod].size() && !ciclu; i++)
if(dist[v[nod][i].node] > dist[nod] + v[nod][i].cost)
{
dist[v[nod][i].node] = dist[nod] + v[nod][i].cost;
q.push_back(v[nod][i].node);
cot[v[nod][i].node]++;
if(cot[v[nod][i].node] > n)
ciclu = 1;
}
}
}
int main()
{
int i, a, b, c;
in>>n>>m;
for(i=1; i<=m; i++)
{
in>>a>>b>>c;
z.node=b;
z.cost=c;
v[a].push_back(z);
}
BellmanFord(1);
if(ciclu)
out<<"Ciclu negativ!"<<"\n";
else
{
for(i = 2 ; i <= n ; i++)
out<<dist[i]<<" ";
}
return 0;
}