Pagini recente » Cod sursa (job #2345592) | Cod sursa (job #2613310) | Cod sursa (job #635300) | Cod sursa (job #1631165) | Cod sursa (job #809763)
Cod sursa(job #809763)
#include <iostream>
#include <fstream>
#include <vector>
#include <queue>
#define INF 2000000000
using namespace std;
int n, m, d[50005], ordin[50005];
struct NOD
{
int x, cost;
};
vector <NOD> a[50005];
queue <int> q;
inline void Read()
{
ifstream f("bellmanford.in");
f>>n>>m;
int x, y, cost;
NOD aux;
for(int i = 1; i<=m; i++)
{
f>>x>>aux.x>>aux.cost;
a[x].push_back(aux);
}
f.close();
}
inline bool BellmanFord()
{
int i, x, cost;
vector <NOD>::iterator it, final;
NOD aux;
for(i=1; i<=n; i++)
d[i] = INF;
d[1] = 0;
q.push(1);
while(!q.empty())
{
x = q.front();
q.pop();
it = a[x].begin();
final = a[x].end();
for(; it!=final; it++)
{
aux = *it;
if (d[aux.x] > d[x] + aux.cost)
{
d[aux.x] = d[x] + aux.cost;
q.push(aux.x);
ordin[aux.x] = ordin[x] + 1;
if (ordin[aux.x] > n)
return true;
}
}
}
return false;
}
inline void Write(bool ciclu)
{
ofstream g("bellmanford.out");
if(ciclu)
{
g<<"Ciclu negativ!\n";
}
else
{
int i;
for(i=2; i<=n; i++)
g<<d[i]<<" ";
g<<"\n";
}
g.close();
}
int main()
{
Read();
bool ciclu;
ciclu = BellmanFord();
Write(ciclu);
return 0;
}