Pagini recente » Cod sursa (job #673441) | Cod sursa (job #1849917) | Cod sursa (job #2919036) | Cod sursa (job #675263) | Cod sursa (job #1756754)
#include <cstdio>
#include <queue>
#include <vector>
using namespace std;
#define NMAX 50005
#define INFI 0x3f3f3f3f
vector < pair < int, int > > v[ NMAX ];
queue < int > Q;
int numara[ NMAX ],
dist[ NMAX ],
in_queue[ NMAX ];
int main()
{
freopen("bellmanford.in","r",stdin);
freopen("bellmanford.out","w",stdout);
int n, m, i, j, x, y, c, nod;
scanf("%d%d",&n,&m);
while( m-- ){
scanf("%d%d%d",&x,&y,&c);
v[ x ].push_back( { c, y } );
}
for( i = 2; i <= n; ++i ) dist[ i ] = INFI;
vector < pair < int, int > > :: iterator it;
Q.push( 1 );
while( !Q.empty() ){
nod = Q.front();
Q.pop();
in_queue[ nod ] = 0;
if( ++numara[ nod ] >= n ){
printf("Ciclu negativ!\n");
return 0;
}
for( it = v[ nod ].begin(); it != v[ nod ].end(); ++it ){
if( dist[ it -> second ] > dist[ nod ] + it -> first ){
dist[ it -> second ] = dist[ nod ] + it -> first;
if( !in_queue[ it -> second ] ){
Q.push( it -> second );
in_queue[ it -> second ] = 1;
}
}
}
}
for( i = 2; i <= n; ++i ) printf("%d ",dist[ i ]);
return 0;
}