Cod sursa(job #906583)

Utilizator alin_iliciAlin Ilici alin_ilici Data 6 martie 2013 22:02:23
Problema Algoritmul Bellman-Ford Scor 65
Compilator cpp Status done
Runda Arhiva educationala Marime 1.42 kb
#include <iostream>
#include <vector>
#include <fstream>
using namespace std;
#define inf 1000000000
#define maxn 50005

vector <int> muchii[maxn],cost[maxn];
int dist[maxn];
int nr_noduri,nr_muchii;

void bellman_ford (int start)
{
    int dist[nr_noduri+1],i,j,nr_ture=0,gasit=1;
    ofstream g("bellmanford.out");
    for (i=1;i<=nr_noduri;i++)
        if (i==start)
        {
            dist[i]=0;
        }
        else
        {
            dist[i]=inf;
        }
    while (1==gasit)
    {
        gasit=0;
        nr_ture=nr_ture+1;
        if (nr_ture>nr_noduri)
        {
            g<<"Ciclu negativ!";
            return;
        }
        else
        {
            for (i=1;i<=nr_noduri;i++)
            {
                for (j=0;j<muchii[i].size();j++)
                {
                    if (dist[i]+cost[i][j]<dist[muchii[i][j]])
                    {
                        dist[muchii[i][j]]=dist[i]+cost[i][j];
                        gasit=1;
                    }
                }
            }
        }
    }
    for (i=2;i<=nr_noduri;i++)
        g<<dist[i]<<" ";
    g.close();
}

int main()
{
    int i,a,b,c;
    ifstream f("bellmanford.in");
    f>>nr_noduri>>nr_muchii;
    for (i=1;i<=nr_muchii;i++)
    {
        f>>a>>b>>c;
        muchii[a].push_back(b);
        cost[a].push_back(c);
    }
    bellman_ford(1);
    f.close();
    return 0;
}