Pagini recente » Cod sursa (job #2262065) | Cod sursa (job #329380) | Cod sursa (job #1418830) | Cod sursa (job #999592) | Cod sursa (job #1459371)
#include <iostream>
#include <vector>
#include <stdio.h>
#include <deque>
using namespace std;
const int NMax=50010;
const long long int Infinit=99999999999;
long Dis[NMax],y,x,z,N,M;
vector<pair <int,int> > Graf[NMax];
deque <int> Q;
int C[NMax];
bool Ciclu;
void Read()
{
freopen("bellmanford.in","r",stdin);
scanf("%d%d",&N,&M);
for(int i=1;i<=M;i++)
{
scanf("%d%d%d",&x,&y,&z);
Graf[x].push_back(make_pair(y,z));
}
}
void BellManFord(const int &StartNod)
{
Q.push_back(StartNod);
for(int i=0;i<=N;i++)
Dis[i]=Infinit;
Dis[1]=0;
while(Q.empty()==false)
{
int nod=Q.front();
Q.pop_front();
for(vector< pair<int,int> >::iterator it=Graf[nod].begin();it!=Graf[nod].end() && Ciclu==false;it++)
{
if(Dis[it->first]>Dis[nod]+it->second)
{
Dis[it->first]=Dis[nod]+it->second;
Q.push_back(it->first);
C[it->first]++;
if(C[it->first]>N)
{
Ciclu=true;
}
}
}
}
}
void Write()
{
freopen("bellmanford.out","w",stdout);
BellManFord(1);
if(Ciclu==false)
{
for(int i=2;i<=N;i++)
printf("%d ",Dis[i]);
}
else printf("Ciclu negativ!");
}
int main()
{
Read();
Write();
}