Cod sursa(job #1348938)

Utilizator XeBluePodaru Mihai XeBlue Data 19 februarie 2015 21:53:17
Problema Algoritmul lui Dijkstra Scor 40
Compilator cpp Status done
Runda Arhiva educationala Marime 1.19 kb
#include <fstream>

using namespace std;

ifstream in("dijkstra.in");
ofstream out("dijkstra.out");

#define N 50001
#define inf (1<<30)

struct graf{
    int cost, nod;
    graf *next; } *A[N];

int d[N], n, m, a, b, c;
bool viz[N];

void add(int a, int b, int c)
{
    graf *q = new graf;
    q->cost = c;
    q->nod = b;
    q->next = A[a];
    A[a] = q;
}

void citire()
{
    in >> n >> m;

    for(int i=1;i<=m;i++)
        in >> a >> b >> c, add(a,b,c);
}

void dij()
{
    int min = inf, poz;

    for(int i=2;i<=n;i++)
        d[i] = inf;

    for(int i=1;i<=n-1;i++)
    {
        min = inf;
        for(int j=1;j<=n;j++)
            if(!viz[j] && d[j]<min)
                min = d[j], poz = j;

        viz[poz] = 1;

        graf *varf = A[poz];

        while(varf)
        {
            if(d[varf->nod] > d[poz] + varf->cost )
                d[varf->nod] = d[poz] + varf->cost;

            varf = varf->next;
        }

    }
}

void afisare()
{
    for(int i=2;i<=n;i++)
        out << (d[i] == inf ? 0:d[i]) << " ";
}


int main()
{
    citire();
    dij();
    afisare();


    in.close();
    out.close();
    return 0;
}