Pagini recente » Cod sursa (job #1740414) | Cod sursa (job #503134) | Cod sursa (job #498639) | Cod sursa (job #2137748) | Cod sursa (job #554172)
Cod sursa(job #554172)
#include<queue>
#include<fstream>
#include<vector>
using namespace std;
//ifstream in("bellmanford.in");
//ifstream in("bellmanford.in");
ifstream in("bf.in");
ofstream out("bf.out");
const int N=50050;
const int INF=10000000;
vector<int>a[N],c[N];
int n,m;
int d[N],t[N];
bool viz[N];
queue<int>coada;
void read()
{
int x,y,z;
in>>n>>m;
for(int i=1;i<=m;i++)
{
in>>x>>y>>z;
a[x].push_back(y);
c[x].push_back(z);
}
}
void init()
{
for(int i=0;i<=n;i++)
d[i]=INF;
}
bool belford(int param)
{
int x,r,cost;
bool k=1;
init();
coada.push(param);
viz[param]=1;
d[param]=0;
while(k==1 && !coada.empty())
{
r=coada.front();
coada.pop();
for(unsigned int i=0;i<a[r].size();i++)
{
x=a[r][i];
cost=c[r][i];
viz[r]=false;
if(d[r]+cost<d[x])
{
d[x]=d[r]+cost;
if(!viz[x])
{
viz[x]=true;
t[x]++;
if(t[x]>n-1)
k=false;
coada.push(x);
}
}
}
}
return k;
}
int main()
{
read();
if(belford(1))
for(int i=2;i<=n;i++)
out<<d[i]<<" ";
else
out<<"Ciclu negativ!";
return 0;
}