Pagini recente » Cod sursa (job #2825982) | Cod sursa (job #563146) | Cod sursa (job #330507) | Cod sursa (job #1959391) | Cod sursa (job #2871031)
#include <fstream>
#include <vector>
#include <queue>
using namespace std;
ifstream fin("bellmanford.in");
ofstream fout("bellmanford.out");
int incoada[50001],d[50001],viz[50001],n;
queue<int>c;
struct arc
{
int nod, cost;
};
vector<arc>v[50001];
const int INF= 1e9;
bool bellmanford(int nod)
{
for(int i=1; i<=n; i++)
d[i]=INF;
d[nod]=0;
c.push(nod);
incoada[nod]=1;
while(!c.empty())
{
int x=c.front();
viz[x]++;
if(viz[x]>=n)
return false;
c.pop();
incoada[x]=0;
for(int i=0; i<v[x].size(); i++)
{
if(d[v[x][i].nod]>d[x]+v[x][i].cost)
{
d[v[x][i].nod]=d[x]+v[x][i].cost;
if(!incoada[v[x][i].nod])
{
c.push(v[x][i].nod);
incoada[v[x][i].nod]=1;
}
}
}
}
return true;
}
int main()
{
int m,a,b,c;
fin>>n>>m;
for(int i=1; i<=m; i++)
{
fin>>a>>b>>c;
arc aux;
aux.nod=b;
aux.cost=c;
v[a].push_back(aux);
}
if(bellmanford(1))
for(int i=2; i<=n; i++)
fout<<d[i]<<" ";
else
fout<<"Ciclu negativ!";
return 0;
}