Pagini recente » Cod sursa (job #3180466) | Cod sursa (job #3040977) | Cod sursa (job #2828517) | Cod sursa (job #2201578) | Cod sursa (job #1817945)
#include <stdio.h>
#define INFINIT 500000000
#include <vector>
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 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;
for(int i=1;i<=n-1;i++)
{
for(int j=1;j<=n;j++)
{
for(auto m:muchie[j])
{
if(optim[j]+m.cost<optim[m.nod])
{
optim[m.nod]=optim[j]+m.cost;
}
}
}
}
int ok=1;
for(int j=1;j<=n-1;j++)
{
for(auto m:muchie[j])
{
if(optim[j]+m.cost<optim[m.nod])
{
ok=0;
j=n+1;
optim[m.nod]=optim[j]+m.cost;
}
}
}
// if(ok==0) fprintf(fout, "Ciclu negativ!");
// else
{
for(int i=2;i<=n;i++)
{
fprintf(fout, "%d ", optim[i]);
}
}
return 0;
}