Pagini recente » Cod sursa (job #2365493) | Cod sursa (job #1969005) | Cod sursa (job #2664796) | Cod sursa (job #3244929) | Cod sursa (job #2576262)
#include <bits/stdc++.h>
using namespace std;
ifstream in("bellmanford.in");
ofstream out("bellmanford.out");
const int MAX=50006;
const int INF =1e9;
int n,m,st,dr,c,nrq[MAX],d[MAX],pret,y;
bool inq[MAX];
vector<pair<int,int> >graf[MAX];
queue<int>q;
void bellmanford(int start)
{
for(int i=1;i<=n;i++) d[i]=INF;
d[start]=0;
inq[start]=true;
nrq[start]++;
q.push(start);
while(!q.empty())
{
int x;
x=q.front();
q.pop();
inq[x]=false;
if(nrq[y]==n)
{
out<<"Ciclu negativ!";
exit(0);
}
for(int i=0;i<graf[x].size();i++)
{
pair<int,int>p=graf[x][i];
y=p.second;
c=p.first;
if(d[x]+c<d[y])
{
d[y]=d[x]+c;
if(inq[y]==false)
{
inq[y]=true;
q.push(y);
nrq[y]++;
}
}
}
}
}
int main()
{
in>>n>>m;
for(int i=1;i<=m;i++)
{
in>>st>>dr>>pret;
graf[st].push_back(make_pair(pret,dr));
}
bellmanford(1);
for(int i=2;i<=n;i++) out<<d[i]<<" ";
return 0;
}