Pagini recente » Cod sursa (job #2553655) | Cod sursa (job #1246993) | Cod sursa (job #1738079) | Cod sursa (job #1871884) | Cod sursa (job #2036146)
#include <bits/stdc++.h>
#define inf 1<<30
using namespace std;
ifstream fin("bellmanford.in");
ofstream fout("bellmanford.out");
int n,m,G,drum[50005],viz[50005],hah[50005],ok=1;
queue <int>q;
vector <pair<int,int> >L[50005];
void Citire()
{
int x,y,c;
fin>>n>>m;
for(int i=1;i<=m;i++)
{
fin>>x>>y>>c;
L[x].push_back({y,c});
}
}
void BellmanFordu()
{
int el;
q.push(1);
drum[1]=0;
for(int i=2;i<=n;i++)
drum[i]=inf;
while(!q.empty() && ok==1)
{
el=q.front();
q.pop();
viz[el]=0;
for(int i=0;i<L[el].size();i++)
{
int p=L[el][i].first;
int cost=L[el][i].second;
if(drum[p]>drum[el]+cost)
{
drum[p]=drum[el]+cost;
if(!viz[el])
{
if(hah[el]>n)
fout<<"Ciclu negativ!\n",ok=0;
else{
viz[el]=1;
hah[el]++;
q.push(p);
}
}
}
}
}
if(ok==1){
for(int i=2;i<=n;i++)
fout<<drum[i]<<" ";
fout<<"\n";
}
}
int main()
{
Citire();
BellmanFordu();
return 0;
}