Cod sursa(job #770278)

Utilizator igsifvevc avb igsi Data 22 iulie 2012 16:47:34
Problema Algoritmul Bellman-Ford Scor 65
Compilator c Status done
Runda Arhiva educationala Marime 0.88 kb
#include<stdio.h>
typedef unsigned short ushort;

int N, M, D[50001];
int E[250000][3];

int main()
{
    FILE *in = fopen("bellmanford.in", "r");
    FILE *out = fopen("bellmanford.out", "w");
    int i, j, ok, a, b, c;

    fscanf(in, "%d %d", &N, &M);
    for(i = 0; i < M; ++i)
	fscanf(in, "%d %d %d", &E[i][0], &E[i][1], &E[i][2]);

    for(i = 1; i <= N; ++i)
	D[i] = 1 << 29;
    D[1] = 0;

    for(ok = 1, i = 1; i < N && ok; ++i)
	for(ok = 0, j = 0; j < M; ++j)
	{
	    a = E[j][0];
	    b = E[j][1];
	    c = E[j][2];
	    if(D[a] + c < D[b])
	    {
		ok = 1;
		D[b] = D[a] + c;
	    }
	}

    if(ok)
    {
	for(i = ok = 0; i < M; ++i)
	    if(D[ E[i][0] ] + E[i][2] < D[ E[i][1] ])
		ok = 1;
	if(ok)
	    fprintf(out, "Ciclu negativ!\n");
    }

    if(!ok)
    {
	for(i = 2; i <= N; ++i)
		fprintf(out, "%d ", D[i]);
	fprintf(out, "\n");
    }

    fclose(in);
    fclose(out);
    return 0;
}