Pagini recente » Cod sursa (job #1136930) | Cod sursa (job #1704677) | Cod sursa (job #602604) | Cod sursa (job #1739477) | Cod sursa (job #2304326)
#include <fstream>
#include <queue>
#include <vector>
#define INF 1000000000
using namespace std;
ifstream fin ("bellmanford.in");
ofstream fout ("bellmanford.out");
vector < pair < int, int > > v[50010];
queue < int > coada;
int hz[50010], distante[50010], viz[50010], n, m, x, y, z;
int main()
{
fin>>n>>m;
for(int i = 1; i <= m; i++){
fin>>x>>y>>z;
v[x].push_back(make_pair(y, z));
}
coada.push(1);
hz[1] = 1;
distante[1] = 0;
for(int i = 2; i <= n; i++){
distante[i] = INF;
}
while(!coada.empty()){
x = coada.front();
coada.pop();
hz[x] = 0;
for(int i = 0; i < v[x].size(); i++){
y = v[x][i].first;
if(distante[y] > distante[x] + v[x][i].second){
distante[y] = distante[x] + v[x][i].second;
if(hz[y] == 0){
viz[y]++;
if(viz[y] == n){
fout<<"Ciclu negativ!";
return 0;
}
coada.push(y);
hz[y] = 1;
}
}
}
}
for(int i = 2 ; i <= n; i++){
fout<<distante[i]<<" ";
}
return 0;
}