Pagini recente » Cod sursa (job #1138979) | Cod sursa (job #2393566) | Cod sursa (job #1755064) | Cod sursa (job #890774) | Cod sursa (job #1163313)
#include <fstream>
#include <vector>
#include <queue>
#include <utility>
#include <algorithm>
#define NMax 50002
#define INF 1<<28
using namespace std;
ifstream fin("bellmanford.in");
ofstream fout("bellmanford.out");
int n,m,nod1,nod2,cost,d[NMax];
std::vector< std::pair<int,int> > G[NMax];
std::vector<int> nodes(NMax);
std::queue< std::pair<int,int> > coada;
bool Bellman_Ford(int x)
{
for(int i=2;i<=n;++i)d[i] = INF;
d[x] = 0;
coada.push(std::make_pair(x,0));
while(coada.empty()==0)
{
int val = (coada.front()).second;
int nod = (coada.front()).first;
coada.pop();
++nodes[nod];
if(nodes[nod]==n)return 0;
for(int i=0;i<G[nod].size();++i)
{
if(d[(G[nod][i]).first] > val + (G[nod][i]).second)
{
d[(G[nod][i]).first] = val + (G[nod][i]).second;
coada.push(std::make_pair((G[nod][i]).first,d[(G[nod][i]).first]));
}
}
}
return 1;
}
int main()
{
fin>>n>>m;
for(int i=1;i<=m;++i)
{
fin>>nod1>>nod2>>cost;
G[nod1].push_back(std::make_pair(nod2,cost));
}
if(Bellman_Ford(1)==0)fout<<"Ciclu negativ!";
else
{
for(int i=2;i<=n;++i)fout<<d[i]<<" ";
}
return 0;
}