Pagini recente » Cod sursa (job #1518736) | Diferente pentru implica-te/arhiva-educationala intre reviziile 147 si 146 | Cod sursa (job #254714) | Cod sursa (job #1300112) | Cod sursa (job #889834)
Cod sursa(job #889834)
#include<stdio.h>
#include<vector>
#include<algorithm>
#define INF 50002
using namespace std;
class edge
{
public:int x,y,c;
};
vector<edge> edges;
int dist[INF],n,m;
int main()
{
freopen("bellmanford.in","r",stdin);
freopen("bellmanford.out","w",stdout);
scanf("%d%d",&n,&m);
for(int i=0;i<m;++i)
{
edge e;
scanf("%d%d%d",&e.x,&e.y,&e.c);
edges.push_back(e);
}
for(int i=1;i<=n;++i)dist[i]=99999999;
bool ok=1;
dist[1]=0;
for(int i=0;ok&&i<n-1;++i)
{
ok=0;
for(int j=0;j<edges.size();++j)
{
edge e=edges[j];
if(dist[e.y]>dist[e.x]+e.c){dist[e.y]=dist[e.x]+e.c;ok=1;}
}
}
for(int j=0;j<edges.size();++j)
{
edge e=edges[j];
if(dist[e.y]>dist[e.x]+e.c){printf("Ciclu negativ!\n");return 0;}
}
for(int i=2;i<=n;++i)printf("%d ",dist[i]);
return 0;
}