Pagini recente » Cod sursa (job #701) | Cod sursa (job #972605) | Cod sursa (job #2258722) | Cod sursa (job #1969669) | Cod sursa (job #2369236)
#include <iostream>
#include <fstream>
#include <queue>
#include <vector>
#include <limits.h>
#define AMAX 50010
using namespace std;
ifstream fin ("bellmanford.in");
ofstream fout ("bellmanford.out");
queue <int> q;
int d[AMAX], fr[AMAX], ap[AMAX], n, ok=0;;
struct Adiacenta {
int vecin, cost;
};
vector <Adiacenta> graph[AMAX];
void bf (int nod)
{
d[nod]=0;
q.push(nod);
fr[nod]++;
ap[nod]=1;
while (!q.empty())
{
nod=q.front();
q.pop();
ap[nod]=0;
for (int i=0;i<graph[nod].size();i++)
{
if (d[nod]+graph[nod][i].cost<d[graph[nod][i].vecin])
{
d[graph[nod][i].vecin]=d[nod]+graph[nod][i].cost;
if (ap[graph[nod][i].vecin]==0)
{
q.push(graph[nod][i].vecin);
ap[graph[nod][i].vecin]=1;
fr[graph[nod][i].vecin]++;
if (fr[graph[nod][i].vecin]>n)
{
fout<<"Ciclu negativ!";
ok=1;
return;
}
}
}
}
}
}
int main()
{
int m, x, y, c;
fin>>n>>m;
for(int i=0;i<m;i++)
{
fin>>x>>y>>c;
graph[x].push_back({y,c});
}
for (int i=1;i<=n;i++)
d[i]=INT_MAX;
bf(1);
if (!ok)
for (int i=2;i<=n;i++)
fout<<d[i]<<" ";
return 0;
}