Pagini recente » Cod sursa (job #1905523) | Cod sursa (job #912179) | Cod sursa (job #1227655) | Cod sursa (job #2251226) | Cod sursa (job #1460576)
#include <cstdio>
#include <vector>
#include <cstring>
#include <deque>
#define INF 1<<30
using namespace std;
int n,m,x,y,z,D[50010],C[50010];
bool cicle = false;
vector < pair <int,int> > graf[50010];
deque <int> Q;
void read()
{
freopen("bellmanford.in","r",stdin);
scanf("%d%d",&n,&m);
for(int i = 1; i <= m; i++)
{
scanf("%d%d%d",&x,&y,&z);
graf[x].push_back(make_pair(y,z));
}
}
void bellmanford(const int &nodStart)
{
Q.push_back(nodStart);
for(int i = 0; i <= n; i++)
D[i] = INF;
D[1] = 0;
while(!Q.empty())
{
int nod = Q.front();
Q.pop_front();
for(int i = 0; i < graf[nod].size() && cicle == false; i++)
{
if(D[graf[nod][i].first] > D[nod] + graf[nod][i].second)
{
D[graf[nod][i].first] = D[nod] + graf[nod][i].second;
Q.push_back(graf[nod][i].first);
C[graf[nod][i].first]++;
if(C[graf[nod][i].first] > n)
cicle = true;
}
}
}
}
void write()
{
freopen("bellmanford.out","w",stdout);
bellmanford(1);
if(cicle == false)
{
for(int i = 2; i <= n; i++)
printf("%d ",D[i]);
}
else
printf("Ciclu negativ!");
}
int main()
{
read();
write();
return 0;
}