Pagini recente » Cod sursa (job #801063) | Cod sursa (job #1979906) | Cod sursa (job #1223130) | Cod sursa (job #2700253) | Cod sursa (job #1262966)
#include <fstream>
#include <queue>
#define INF 10000000
#include <vector>
#define NMAX 50010
using namespace std;
ifstream fin("bellmanford.in");
ofstream fout("bellmanford.out");
int n,m,ok;
queue <int> C;
vector< pair<int,int> > M[NMAX];
int use[NMAX],d[NMAX],tata[NMAX];
void bellmanford();
int cauta_cost(int,int);
int main()
{
int i,x,y,c;
fin >> n >> m;//nodul de start 1
for(i=1;i<=m;i++)
{
fin >> x >> y >> c;
M[x].push_back(make_pair(y,c));
}
bellmanford();
if(ok==0)
fout << "Ciclu negativ!\n";
else
for(i=2;i<=n;i++)
fout << d[i] << ' ';
return 0;
}
void bellmanford()
{
int i,val,dim,cat;
C.push(1);
//pop
//front
use[1]=1;
for(i=1;i<=n;i++)
{
d[i]=INF;
tata[i]=0;
}
ok=1;
d[1]=0;
while(C.size()!=0 && ok==1)
{
val=C.front();
C.pop();
dim=M[val].size();
for(i=0;i<dim;i++)
{
if(d[M[val][i].first]>d[val]+M[val][i].second)
{
//imbunatatesc
d[M[val][i].first]=d[val]+M[val][i].second;
C.push(M[val][i].first);
use[M[val][i].first]++;
tata[M[val][i].first]=val;
if(use[M[val][i].first]==n)
{
ok=0;
break;
}
}
}
}
}
int cauta_cost(int a,int b)
{
int i,dim=M[a].size();
for(i=0;i<dim;i++)
if(M[a][i].first==b)
return M[a][i].second;
return INF;
}