Pagini recente » Cod sursa (job #2254488) | Cod sursa (job #2537177) | Cod sursa (job #2343613) | Cod sursa (job #2603678) | Cod sursa (job #2131322)
#include <bits/stdc++.h>
using namespace std;
ifstream f("bellmanford.in");
ofstream g("bellmanford.out");
#define nmax 50003
#define inf INT_MAX
int n,m,x,y,cost;
vector < pair < int, int > > matrice[nmax];
queue < int > coada;
int dist[nmax],aparitii[nmax];
bool viz[nmax];
void Read_Graph()
{
f>>n>>m;
for(int i=1; i<=m; i++)
{
f>>x>>y>>cost;
matrice[x].push_back(make_pair(y,cost));
}
}
void Bellman_Ford(int nod)
{
for(int i=1;i<=n;i++)
dist[i]=inf;
dist[nod]=0;
coada.push(nod);
viz[nod]=true;
while(!coada.empty())
{
nod=coada.front();
coada.pop();
viz[nod]=false;
for(vector < pair < int, int > > ::iterator it=matrice[nod].begin(); it!=matrice[nod].end(); it++)
if(dist[it->first]>dist[nod]+it->second)
{
dist[it->first]=dist[nod]+it->second;
if(!viz[it->first] && aparitii[it->first]>n)
{
g<<"Ciclu negativ!";
exit(0);
}
aparitii[it->first]++;
viz[it->first]=true;
coada.push(it->first);
}
}
for(int i=2;i<=n;i++)
g<<dist[i]<<" ";
}
int main()
{
Read_Graph();
Bellman_Ford(1);
return 0;
}