Pagini recente » Cod sursa (job #2044026) | Cod sursa (job #1078489) | Cod sursa (job #1117138) | Cod sursa (job #2670338) | Cod sursa (job #1817983)
#include <stdio.h>
#define INFINIT 500000000
#include <vector>
#include <queue>
using namespace std;
FILE *fin = fopen("bellmanford.in", "r");
FILE *fout = fopen("bellmanford.out", "w");
struct pereche
{
int nod,cost;
};
vector <pereche> muchie[50001];
int optim[50001];
int cnt[50001];
char vizitat[50001];
int n,m,st,dr,cos;
int main()
{
fscanf(fin, "%d%d", &n , &m);
for(int i=1;i<=m;i++)
{
fscanf(fin, "%d%d%d", &st, &dr, &cos);
muchie[st].push_back({dr,cos});
}
optim[1]=0;
for(int i=2;i<=n;i++) optim[i]=INFINIT;
queue <int> frontiera;
frontiera.push(1);
int ok=1;
vizitat[1]=1;
cnt[1]=1;
while((!frontiera.empty()) && ok==1)
{
int nodul=frontiera.front();
frontiera.pop();
cnt[nodul]=0;
for(auto m:muchie[nodul])
{
if(optim[nodul]+m.cost<optim[m.nod])
{
optim[m.nod]=m.cost+optim[nodul];
if(vizitat[m.nod]==0)
{
vizitat[m.nod]=1;
cnt[m.nod]++;
if(cnt[m.nod]>n)ok=0;
frontiera.push(m.nod);
}
}
}
}
if(ok==1)
{
for(int i=2;i<=n;i++)
{
fprintf(fout, "%d ", optim[i]);
}
}
else fprintf(fout, "Ciclu negativ !");
return 0;
}