Pagini recente » Cod sursa (job #33012) | Cod sursa (job #382888) | Cod sursa (job #2833086) | Cod sursa (job #801342) | Cod sursa (job #1766594)
#include <bits/stdc++.h>
#define Nmax 50005
#define INF (1 << 30)
using namespace std;
struct muchie
{
int nod, cost;
};
vector <muchie> L[Nmax];
bool Negative, viz[Nmax];
int dist[Nmax], cnt[Nmax], n, m;
queue <int> q;
void Citire()
{
ifstream f("bellmanford.in");
f >> n >> m;
muchie w;
int x;
for(int i = 1; i <= m; i++)
{
f >> x >> w.nod >> w.cost;
L[x].push_back(w);
}
f.close();
}
void BellmanFord()
{
for(int i = 1; i <= n; i++)
dist[i] = INF;
dist[1] = 0;
viz[1] = true;
cnt[1] = 1;
q.push(1);
while(!q.empty() && !Negative)
{
int k = q.front();
q.pop();
viz[k] = false;
for(unsigned i = 0; i < L[k].size(); i++)
{
int j = L[k][i].nod;
int c = L[k][i].cost;
if(dist[j] > dist[k] + c)
{
dist[j] = dist[k] + c;
if(!viz[j])
{
q.push(j);
viz[j] = true;
cnt[j]++;
if(cnt[j] > n)
Negative = true;
}
}
}
}
}
void Afisare()
{
ofstream g("bellmanford.out");
if(Negative == true)
g << "Ciclu negativ!";
else
for(int i = 2; i <= n; i++)
g << dist[i] << " ";
g << "\n";
g.close();
}
int main()
{
Citire();
BellmanFord();
Afisare();
return 0;
}