Pagini recente » Cod sursa (job #797773) | Cod sursa (job #1120724) | Cod sursa (job #750150) | Cod sursa (job #610316) | Cod sursa (job #3251650)
#include <fstream>
#include <vector>
#include <queue>
#define Inf 0x3f3f3f3f
using namespace std;
ifstream in("bellmanford.in");
ofstream out("bellmanford.out");
vector<vector<pair<int,int>>> g;
queue<int> q;
int main()
{
int d[50005], cnt[50005];
bool viz[50005] = {0};
int n, m, a, b, cost, i, poz_c, vecin;
in >> n >> m;
g.resize(n + 1);
for(i = 1; i <= m; i++)
{
in >> a >> b >> cost;
g[a].push_back(make_pair(b, cost));
}
for(i = 0; i <= n; i++)
{
d[i] = Inf;
}
d[1] = 0;
viz[1] = 1;
cnt[1] = 1;
q.push(1);
while(q.empty() == 0)
{
poz_c = q.front();
for(i = 0; i < g[poz_c].size(); i++)
{
vecin = g[poz_c][i].first;
cost = g[poz_c][i].second;
if(d[vecin] > d[poz_c] + cost)
{
d[vecin] = d[poz_c] + cost;
if(viz[vecin] == 0)
{
viz[vecin] = 1;
cnt[vecin]++;
if(cnt[vecin] > n)
{
out << "Ciclu negativ!";
return 0;
}
q.push(vecin);
}
}
}
q.pop();
viz[poz_c] = 0;
}
for(i = 2; i <= n; i++)
{
out << d[i] << " ";
}
return 0;
}