Pagini recente » Cod sursa (job #1642074) | Cod sursa (job #631926) | Cod sursa (job #2856954) | Cod sursa (job #2584427) | Cod sursa (job #906506)
Cod sursa(job #906506)
#include <iostream>
#include <vector>
#include <fstream>
using namespace std;
#define inf 1000000000
#define maxn 50005
vector <int> muchii[maxn],cost[maxn];
int dist[maxn];
int nr_noduri,nr_muchii;
void bellman_ford (int start)
{
int dist[nr_noduri+1],i,j,nr_ture=0,gasit=1;
ofstream g("bellmanford.out");
for (i=1;i<=nr_noduri;i++)
if (i==start)
{
dist[i]=0;
}
else
{
dist[i]=inf;
}
while (1==gasit)
{
gasit=0;
nr_ture=nr_ture+1;
if (nr_ture>=nr_noduri)
{
cout<<"Ciclu negativ!";
return;
}
else
{
for (i=1;i<=nr_noduri;i++)
{
for (j=0;j<muchii[i].size();j++)
{
if (dist[i]+cost[i][j]<dist[muchii[i][j]])
{
dist[muchii[i][j]]=dist[i]+cost[i][j];
gasit=1;
}
}
}
}
}
for (i=2;i<=nr_noduri;i++)
g<<dist[i]<<" ";
g.close();
}
int main()
{
int i,a,b,c;
ifstream f("bellmanford.in");
f>>nr_noduri>>nr_muchii;
for (i=1;i<=nr_muchii;i++)
{
f>>a>>b>>c;
muchii[a].push_back(b);
cost[a].push_back(c);
}
bellman_ford(1);
f.close();
return 0;
}