Pagini recente » Cod sursa (job #2386296) | Cod sursa (job #2472808) | Cod sursa (job #183671) | Cod sursa (job #812121) | Cod sursa (job #2868133)
#include <fstream>
#include <vector>
#include <queue>
#include <bitset>
using namespace std;
ifstream fin("bellmanford.in");
ofstream fout("bellmanford.out");
const int inf=1000000000;
bitset<50002> frq;
int i,n,m,x,y,c,viz[50002],d[50002];
vector<pair<int,int>> graf[50002];
queue<int> q;
int BellmanFord(int start)
{
int i;
for(i=1;i<=n;i++)
{
viz[i]=0;
frq[i]=0;
d[i]=inf;
}
q.push(start);
frq[start]=1;///e in coada
d[start]=0;
while(!q.empty())
{
int nod=q.front();
viz[nod]++; ///vizitat
if(viz[nod]>n)
return 0;
q.pop();
frq[nod]=0;
for(i=0;i<graf[nod].size();i++)
{
int vecin=graf[nod][i].first;
int cost=graf[nod][i].second;
if(d[vecin]>cost+d[nod])
{
d[vecin]=cost+d[nod];
if(frq[vecin]==0)
q.push(vecin);
}
}
}
return 1;
}
int main()
{
///frq inseamna daca e sau nu in coada
fin>>n>>m;
for(i=1;i<=m;i++)
{
fin>>x>>y>>c;
graf[x].push_back(make_pair(y,c));
}
if(BellmanFord(1))
{
for(i=2;i<=n;i++)
fout<<d[i]<<' ';
}
else
fout<<"Ciclu negativ!";
return 0;
}