Pagini recente » Cod sursa (job #1987549) | Cod sursa (job #1748898) | Cod sursa (job #39868) | Cod sursa (job #3258979) | Cod sursa (job #2237247)
#include<iostream>
#include<fstream>
#include<vector>
#include<queue>
#define mp make_pair
#define NMAX 50009
#define oo (1<<31)-2
using namespace std;
ifstream in("bellmanford.in");
ofstream out("bellmanford.out");
int N,M,x,y,c,d[NMAX];
bool ok,viz[NMAX],inq[NMAX];
vector<pair<int,int> >matrix[NMAX];
queue<int>coada;
void initializare()
{
int i;
in>>N>>M;
for(i=0;i<M;i++)
{
in>>x>>y>>c;
matrix[x].push_back(make_pair(y,c));
}
for(i=1;i<=N;i++)
{
viz[i]=0;
inq[i]=0;
d[i]=oo;
}
coada.push(1);
viz[1]=1;
d[1]=0;
inq[1]=1;
ok=0;
}
void algoritm()
{
while(!coada.empty()&!ok)
{
int ndcrt=coada.front();
viz[ndcrt]++;
if(viz[ndcrt]>=N)
ok=1;
inq[ndcrt]=0;
coada.pop();
for(unsigned i=0;i<matrix[ndcrt].size();i++)
{
int neigh=matrix[ndcrt][i].first;
int cost=matrix[ndcrt][i].second;
if(cost+d[ndcrt]<d[neigh])
{
d[neigh]=cost+d[ndcrt];
if(!inq[neigh])
coada.push(neigh);
}
}
}
}
void tipar()
{
if(!ok)
for(int i=2;i<=N;i++)
out<<d[i]<<" ";
else
out<<"Ciclu negativ!";
}
int main()
{
initializare();
algoritm();
tipar();
}