Pagini recente » Cod sursa (job #2260749) | Cod sursa (job #2040885) | Cod sursa (job #2561056) | Cod sursa (job #22749) | Cod sursa (job #2036036)
#include <bits/stdc++.h>
using namespace std;
ifstream fin("bellmanford.in");
ofstream fout("bellmanford.out");
int n, m, ok, drum[50006];
int v[50006];
bool viz[50006];
vector<pair<int, int> >L[50006];
queue < int >q;
void Bellmanford()
{
int i, o, p, j;
q.push(1);
while(!q.empty() && !ok)
{
i = q.front();
q.pop();
for(j = 0; j < L[i].size(); j++)
{
o = L[i][j].first;
p = L[i][j].second;
if(drum[o] > drum[i] + p)
{
drum[o] = drum[i] + p;
if(!viz[p])
{
if(v[p] > n)
ok = 1;
else
{
q.push(o);
v[p]++;
viz[p] = 1;
}
}
}
}
}
if(ok == 1)
fout << "Ciclu negativ!\n";
else
for(i = 2; i <= n; i++)
fout << drum[i] << " ";
}
int main()
{
int i, x, y, z;
fin >> n >> m;
for(i = 1; i <= m; i++)
{
fin >> x >> y >> z;
L[x].push_back({y, z});
}
for(i = 1; i <= n; i++)
drum[i] = (1 << 30);
drum[1] = 0;
Bellmanford();
return 0;
}