Cod sursa(job #1077939)

Utilizator PlatonPlaton Vlad Platon Data 11 ianuarie 2014 20:22:33
Problema Algoritmul lui Dijkstra Scor 10
Compilator cpp Status done
Runda Arhiva educationala Marime 1.12 kb
#include <stdio.h>
#include <vector>

#define print(a ) printf("%d", a );
#define read(a) scanf("%d", &a);
#define maxn 50000
#define inf 10000000

using namespace std;

struct Edge
{
    int u, v, w;
    Edge(int _u, int _v, int _w)
    {
        u=_u;v=_v;w=_w;
    }
};

int n,m;
vector<Edge> edges;
int dmin[maxn];

void afisare()
{
    for (int i = 1; i < n; ++i)
        printf("%d ",dmin[i+1]);
}

void citire()
{
    freopen("dijkstra.in", "r", stdin);

    read(n);read(m);

    for(int i=0;i<m;++i)
    {
        int a, b, c;
        read(a);read(b);read(c);
        edges.push_back(Edge(a,b,c));
    }
}

void bellman_ford(int x)
{
    dmin[x] = 0;

     for (int i = 0; i < n - 1; ++i)
        for (int j = 0; j < edges.size(); ++j)
            if (dmin[edges[j].u] + edges[j].w < dmin[edges[j].v])
                dmin[edges[j].v] = dmin[edges[j].u] + edges[j].w;
}

int main()
{
    freopen("dijkstra.out", "w", stdout);

    citire();

    for (int i = 1; i <= n; ++i)
        dmin[i] = inf;

    dmin[1]=0;

    bellman_ford(1);

    afisare();

    return 0;
}