Pagini recente » Cod sursa (job #1511108) | Cod sursa (job #1705925) | Cod sursa (job #2436470) | Atasamentele paginii Clasament vacanta_10_4 | Cod sursa (job #3295241)
#include <bits/stdc++.h>
#include <fstream>
using namespace std;
ifstream fin("bellmanford.in");
ofstream fout("bellmanford.out");
vector<pair<int,int>>graf[50005];
queue<int> q;
int dist[50005], noduri[50005];
bool apartq[50005];
int main()
{
int n,m,x,y,c;
int i;
fin>>n>>m;
for(i=1;i<=m;i++)
{
fin>>x>>y>>c;
graf[x].push_back({y,c});
}
for(i=2;i<=n;i++){
dist[i]=1e9;
apartq[i]=false;}
noduri[1]=1;
dist[1]=0;
q.push(1);
apartq[1]=true;
while(!q.empty())
{
int nodCrt=q.front();
q.pop();
apartq[nodCrt]=false;
//verif ciclu negativ
if(noduri[nodCrt]>n){
fout<<"Ciclu negativ!";
return 0;}
for(auto a:graf[nodCrt])
if(dist[a.first]>dist[nodCrt]+a.second)
{
noduri[a.first]=noduri[nodCrt]+1;
dist[a.first]=dist[nodCrt]+a.second;
if(!apartq[a.first]){
q.push(a.first);
apartq[a.first]=true;}
}
}
for(i=2;i<=n;i++)
fout<<dist[i]<<" ";
return 0;
}