Pagini recente » Cod sursa (job #2906142) | Cod sursa (job #2091629) | Cod sursa (job #1429104) | Cod sursa (job #2395069)
#include <bits/stdc++.h>
using namespace std;
ifstream in("bellmanford.in");
ofstream out("bellmanford.out");
#define NMAX 50005
struct edge{
int dest, cost;
}aux;
int n,m,dist[NMAX],cnt[NMAX];
bool vaz[NMAX];
vector <edge>g[NMAX];
queue <int>q;
bool dijkstra(){
cnt[1]=1;
dist[1]=0;
q.push(1);
while(!q.empty()){
int node=q.front();
q.pop();
vaz[node]=0;
for(auto y:g[node]){
if(dist[y.dest]>dist[node]+y.cost){
dist[y.dest]=dist[node]+y.cost;
if(vaz[y.dest]==0){
cnt[y.dest]++;
q.push(y.dest);
vaz[y.dest]=1;
if(cnt[y.dest]>=n){
out<<"Ciclu negativ!";
return 0;
}
}
}
}
}
return true;
}
int main()
{
in>>n>>m;
int x,y,c;
for(int i=1;i<=m;i++){
in>>x>>y>>c;
aux.cost=c;
aux.dest=y;
g[x].push_back(aux);
}
for(int i=1;i<=NMAX;i++)
dist[i]=1e9;
if(dijkstra())
for(int i=2;i<=n;i++){
out<<dist[i]<<" ";
}
return 0;
}