Pagini recente » Cod sursa (job #1370526) | Cod sursa (job #1402020) | Cod sursa (job #1188904) | Cod sursa (job #20615) | Cod sursa (job #1201002)
#include<fstream>
#include<vector>
#include<queue>
#include<cstdio>
using namespace std;
vector<pair<int,int> > lista[50001];
queue<int>q;
bool ok[50001];
int n,m,relaxari[50001],dist[50001];
void read()
{
ifstream f("bellmanford.in");
int x,y,w;
f>>n>>m;
for(int i=1;i<=m;i++)
{
f>>x>>y>>w;
lista[x].push_back(make_pair(y,w));
}
f.close();
}
void write(bool cond)
{
ofstream g("bellmanford.out");
if(cond==0)
{
g<<"Ciclu negativ!";
}
else
{
for(int i=2;i<=n;i++)
g<<dist[i]<<" ";
}
g.close();
}
int bellmanford()
{
int i,y,w;
for(i=2;i<=n;i++)
{
dist[i]=9999999;
}
dist[1]=0;
q.push(1);
while(!q.empty())
{
i=q.front();
q.pop();
relaxari[i]++;
if(relaxari[i]==n)
{
write(0);
return 0;
}
ok[i]=0;
for(int j=0;j<lista[i].size();j++)
{
y=lista[i][j].first;
w=lista[i][j].second;
if(dist[i]+w<dist[y])
{
dist[y]=dist[i]+w;
if(ok[y]==0)
{
ok[y]=1;
q.push(y);
}
}
}
}
write(1);
return 0;
}
int main()
{
read();
bellmanford();
return 0;
}