Pagini recente » Cod sursa (job #1025514) | Istoria paginii utilizator/burgundyshadow | Cod sursa (job #432718) | Cod sursa (job #1522344) | Cod sursa (job #1123789)
#include <cstdio>
#include<vector>
#define MAX_N 50001
#define inf 250000000
using namespace std;
int N, M, dist[MAX_N], better[MAX_N];
vector<pair <int, int> > graph[MAX_N];
FILE *f, *g;
int main()
{
int ok=1;
f = fopen("bellmanford.in", "r");
g = fopen("bellmanford.out", "w");
fscanf(f, "%d%d", &N, &M);
for(int i=0; i<M; i++)\
{
int x, y, c;
fscanf(f, "%d%d%d", &x, &y, &c);
graph[x].push_back(make_pair(y, c));
}
for(int i=2; i<=N; i++)
dist[i]=inf;
better[1]=1;
for(int k=1; k<=N; k++)
for(int i=1; i<=N && better[i]; i++)
for(int j=0; j<graph[i].size(); j++)
{
int vecin=graph[i][j].first;
int cost=graph[i][j].second;
if(dist[vecin]>dist[i]+cost)
{dist[vecin]=dist[i]+cost;
better[vecin]=1;}
}
for(int i=1; i<=N; i++)
for(int j=0; j<graph[i].size(); j++)
{
int vecin=graph[i][j].first;
int cost=graph[i][j].second;
if(dist[vecin]>dist[i]+cost)
ok=0;
}
if(ok==0)
fprintf(g, "Ciclu negativ!");
else
for(int i=2; i<=N; i++)
fprintf(g, "%d ", dist[i]);
fclose(f);
fclose(g);
return 0;
}