Pagini recente » Cod sursa (job #3152977) | Cod sursa (job #2652087) | Cod sursa (job #3169216) | Cod sursa (job #3198427) | Cod sursa (job #1312457)
#include <cstdio>
#include <list>
#define DIM 50001
#define INF 99999
using namespace std;
int n,m,x,y,c,d[DIM];
bool ok;
struct point
{
int x,cost;
};
list<point> nod[DIM];
void bellmanford(int k)
{
for(int i=1;i<=n;++i)
d[i]=INF;
d[k]=0;
for(int i=1;i<=n;++i)
{
ok=0;
for(int j=1;j<=n;++j)
for(list<point>::iterator t=nod[j].begin();t!=nod[j].end();++t)
{
point q=*t;
if(d[j]!=INF && q.x!=k && d[j]+q.cost<d[q.x])
{
d[q.x]=d[j]+q.cost;
ok=1;
}
}
}
}
int main()
{
//ifstream f("bellmanford.in");
//ofstream g("bellmanford.out");
//f>>n>>m;
FILE *f=fopen("bellmanford.in","r"), *g=fopen("bellmanford.out","w");
fscanf(f,"%d %d",&n,&m);
for(int i=1;i<=m;++i)
{
point q;
//f>>x>>y>>q.cost;
fscanf(f,"%d %d %d",&x,&y,&q.cost);
q.x=y;
nod[x].push_back(q);
}
bellmanford(1);
if(ok) fprintf(g,"Ciclu negativ!\n"); //g<<"Ciclu negativ!\n";
else
for(int i=2;i<=n;++i)
fprintf(g,"%d ",d[i]);
fprintf(g,"\n");
//g<<d[i]<<" ";
//g<<'\n';
//f.close();
//g.close();
return 0;
}