Cod sursa(job #556597)

Utilizator idomiralinIdomir Alin idomiralin Data 16 martie 2011 11:06:56
Problema Algoritmul Bellman-Ford Scor 15
Compilator cpp Status done
Runda Arhiva educationala Marime 1.12 kb
# include <stdlib.h>
# include <cstdio>

using namespace std;

# define inf 10000000

struct camp
{
       long a, b, c;
       }G[250005];

long i, m, n, ok, cost[50005];

int verif()
{long i;
    for (i = 1; i <= m; i++)
    if (cost[G[i].a] + G[i].c < cost[G[i].b])
       return 1;
    return 0;
}

int main()
{
    freopen("bellmanford.in","r",stdin);
    freopen("bellmanford.out","w",stdout);
    
    scanf("%d%d",&n,&m);
    
    for (i = 1; i <= m; i++)
    {
        scanf("%d%d%d",&G[i].a,&G[i].b,&G[i].c);
        if (G[i].a == 1) cost[G[i].b] = G[i].c;
        }
        
    for (i = 2; i <= n; i++)
    if (!cost[i]) cost[i] = inf;
    
    while (!ok)
    {
          ok = 1;
          for (i = 1; i <= m; i++)
          if (cost[G[i].b] > cost[G[i].a] + G[i].c)
                           cost[G[i].b] = cost[G[i].a] + G[i].c, ok = 0;
          }         
          
    if (verif())
    {
                printf("Ciclu negativ!\n");
                return 0;
                }
    
    for (i = 2; i <= n; i++)
    printf("%d ",cost[i]);
    
    
return 0;
}