Pagini recente » Cod sursa (job #741663) | Cod sursa (job #1049914) | Cod sursa (job #1109062) | Cod sursa (job #821746) | Cod sursa (job #1166883)
#include <fstream>
#include <vector>
#include <queue>
const int NMAX = 50003;
const int inf = 0x3f3f3f3f;
using namespace std;
ifstream f("bellmanford.in");
ofstream g("bellmanford.out");
int N,M,nod,x,y,z,sol[NMAX],contor[NMAX];
bool inqueue[NMAX],ok;
vector <int> v[NMAX];
vector <int> Cost[NMAX];
queue <int> Q;
int main()
{
f >> N >> M;
for (int i = 1; i <= M; ++i)
{
f >> x >> y >> z;
v[x].push_back(y);
Cost[x].push_back(z);
}
for (int i = 1; i <= N; ++i)
{
sol[i] = inf;
}
sol[1] = 0;
Q.push(1);
inqueue[1] = true;
ok = true;
while (!Q.empty() && ok)
{
nod = Q.front();
Q.pop();
inqueue[nod] = false;
for (int i = 0 ; i < v[nod].size(); ++i)
{
if (sol[nod] + Cost[nod][i] < sol[ v[nod][i] ])
{
sol[ v[nod][i] ] = sol[nod] + Cost[nod][i];
if (!inqueue[ v[nod][i] ])
{
Q.push( v[nod][i] );
inqueue[ v[nod][i] ] = true;
contor[ v[nod][i] ]++;
if (contor[ v[nod][i] ] >= N)
{
ok = false;
break;
}
}
}
}
}
if (ok)
{
for (int i = 2; i <= N; ++i)
{
g << sol[i] << " ";
}
}
else g << "Ciclu negativ!";
f.close();
g.close();
return 0;
}