Pagini recente » Cod sursa (job #1904543) | Cod sursa (job #1369488) | Cod sursa (job #2947060) | Cod sursa (job #2162217) | Cod sursa (job #2377050)
#include <cstdio>
#include <queue>
#include <vector>
using namespace std;
queue<int> q;
int d[50010],cnt[50010];
char vaz[50010];
vector<pair<int,int>> v[50010];
int main()
{
freopen("bellmanford.in","r",stdin);
freopen("bellmanford.out","w",stdout);
int n,m,x,y,c;
scanf("%d%d",&n,&m);
for(int i=1;i<=m;i++)
{
scanf("%d%d%d",&x,&y,&c);
v[x].push_back({y,c});
}
for(int i=1;i<=n;i++) d[i]=1e9;
vaz[1]=1;
d[1]=0;
cnt[1]=1;
q.push(1);
while(!q.empty())
{
int nod=q.front();
q.pop();
vaz[nod]=0;
for(int i=0;i<v[nod].size();i++)
{
int vec=v[nod][i].first,c=v[nod][i].second;
if(d[nod]+c<d[vec])
{
d[vec]=d[nod]+c;
if(vaz[vec]==0)
{
cnt[vec]++;
if(cnt[vec]>=n) {printf("Ciclu negativ!");return 0;}
vaz[vec]=1;
q.push(vec);
}
}
}
}
for(int i=2;i<=n;i++) printf("%d ",d[i]);
return 0;
}