Pagini recente » Cod sursa (job #234952) | Borderou de evaluare (job #1036850) | Cod sursa (job #2934883) | Cod sursa (job #2808928) | Cod sursa (job #2972574)
#include <iostream>
#include <fstream>
#include <vector>
# include <queue>
# define NMax 50005
# define INF 0x3f3f3f3f
using namespace std;
ifstream f("bellmanford.in");
ofstream g("bellmanford.out");
vector<int>G[50005],C[50005];
queue<int>q;
int n,d[50005],ci[50005],x,m,y,c;
int ft(int a)
{
for(int i=1; i<=n; i++)
d[i]=INF;
d[a]=0;
q.push(a);
while(!q.empty())
{
int x=q.front();
ci[x]++;
if(ci[x]>n)
return -1;
for(int i=0; i<G[x].size(); i++)
if(d[G[x][i]]>d[x]+C[x][i])
{
d[G[x][i]]=d[x]+C[x][i];
q.push(G[x][i]);
}
q.pop();
}
return 1;
}
int main()
{
f>>n>>m;
for(int i=1; i<=m; i++)
{
f>>x>>y>>c;
G[x].push_back(y);
C[x].push_back(c);
}
x=ft(1);
if(x>0)
for(int i=2;i<=n;i++)
g<<d[i]<<' ';
else
g<<"Ciclu negativ!";
return 0;
}