Pagini recente » Cod sursa (job #444392) | Cod sursa (job #1264711) | Cod sursa (job #686867) | Cod sursa (job #1390276) | Cod sursa (job #2375418)
#include <fstream>
#include<vector>
#include<queue>
using namespace std;
ifstream f("bellmanford.in");
ofstream g("bellmanford.out");
int n,m,cost[50003],viz[50003];
const int INF=0x3f3f3f3f;
vector<pair<int, int> >v[50003];
queue<int>q;
void bell_ford()
{
int i, nod;
for(i=2;i<=n;i++) cost[i]=INF;
q.push(1);
while(!q.empty())
{
nod=q.front();
q.pop();
viz[nod]++;
if(viz[nod]>n) {g<<"Ciclu negativ!"<<'\n'; return;}
vector<pair<int, int> >::iterator it;
for(it=v[nod].begin();it!=v[nod].end();++it)
{
int c=it->second; int to=it->first;
if(cost[nod]+c<cost[to])
{
cost[to]=cost[nod]+c;
q.push(to);
}
}
}
for(i=2;i<=n;i++) g<<cost[i]<<' ';
g<<'\n';
}
int main()
{
int x,y,c;
f>>n>>m;
int i;
for(i=1;i<=m;i++)
{
f>>x>>y>>c;
v[x].push_back(make_pair(y,c));
}
bell_ford();
f.close();
g.close();
return 0;
}