Pagini recente » Cod sursa (job #1293111) | Cod sursa (job #2931152) | Cod sursa (job #583816) | Cod sursa (job #3147267) | Cod sursa (job #2123321)
#include <fstream>
#include <vector>
#include <queue>
using namespace std;
ifstream fin("bellmanford.in");
ofstream fout("bellmanford.out");
struct drum
{
int y,c;
}el;
bool viz[50005];
int ok[50005],treceri[50005];
int n,m,x,y,c;
vector <drum> G[50002];
queue <int> q;
bool bfs()
{
q.push(1);
int poz;
while(!q.empty())
{
poz=q.front();
q.pop();
viz[poz]=0;
for(vector <drum>::iterator it=G[poz].begin();it!=G[poz].end();it++)
{
if(it->c+ok[poz]<ok[it->y])
{
ok[it->y]=it->c+ok[poz];
treceri[it->y]++;
if(treceri[it->y]==n)
return 1;
if(!viz[it->y])
{
viz[it->y]=1;
q.push(it->y);
}
}
}
}
return 0;
}
int main()
{
fin>>n>>m;
for(int i=1;i<=m;i++)
{
fin>>x>>y>>c;
el.c=c;
el.y=y;
G[x].push_back(el);
}
for(int i=2;i<=n;i++)
ok[i]=(1<<30);
if(bfs())
fout<<"Ciclu negativ!";
else
for(int i=2;i<=n;i++)
fout<<ok[i]<<" ";
return 0;
}