Pagini recente » Cod sursa (job #3127815) | Cod sursa (job #1577346) | Cod sursa (job #2345095) | Cod sursa (job #2032496) | Cod sursa (job #1052700)
#include <fstream>
#define nmax 50005
#include <vector>
#include <queue>
#define inf 250000000
#include <cstdio>
#include <utility>
using namespace std;
FILE *in,*o;
int n,m,x,y,c;
vector< pair<int, int> > graf[nmax];
queue <int> C;
int dmin[nmax],nr[nmax],pred[nmax];
void cit()
{
int i;
in=fopen("bellmanford.in","r");
fscanf(in,"%d%d",&n,&m);
for(i=1; i<=m; i++)
{
fscanf(in,"%d%d%d",&x,&y,&c);
graf[x].push_back(make_pair(y,c));
}
}
int bellmanford()
{
int x,y,c;
unsigned int i;
for(i=2; i<=n; i++)
{
dmin[i]=inf;
pred[i]=1;
}
C.push(1);
nr[1]++;
while(!C.empty())
{
x=C.front();
C.pop();
for(i=0; i<graf[x].size(); i++)
{
y=graf[x][i].first;
c=graf[x][i].second;
if(dmin[y]>dmin[x]+c)
{
dmin[y]=dmin[x]+c;
pred[y]=x;
nr[y]++;
C.push(y);
if(nr[y]==n)
return 0;
}
}
}
return 1;
}
void afis()
{
int i;
for(i=2; i<=n; i++)
fprintf(o,"%d ",dmin[i]);
fprintf(o,"\n");
}
int main()
{
cit();
o=fopen("bellmanford.out","w");
if(bellmanford()==0)
fprintf(o,"Circuit negativ!\n");
else
afis();
return 0;
}