Cod sursa(job #2423295)

Utilizator alexjircanalex jircan alexjircan Data 20 mai 2019 23:27:28
Problema Algoritmul lui Dijkstra Scor 10
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.47 kb
#include <iostream>
#include <fstream>

#define pinf 50001

using namespace std;

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

struct graf{

    int nod, cost;
    graf *urm;

};

graf *a[50010], *aux;
int n, m, d[50010], viz[50010], x, y, c;

void dijkstra(int start)
{
    int i, j, minn, pminn;
    for(i=1; i<=n; i++)
    {
        d[i] = pinf;
    }
    d[start] = 0;
    for(i=1; i<=n; i++)
    {
        minn = pinf;
        for(j=1; j<=n; j++)
        {
            if( d[j]<minn && viz[j]==0 )
            {
                minn = d[j];
                pminn = j;
            }
        }
        viz[pminn] = 1;
        aux = a[pminn];
        while( aux!=NULL )
        {
            if( d[aux->nod] > aux->cost + d[pminn] )
            {
                d[aux->nod] = aux->cost + d[pminn];
            }
            aux = aux->urm;
        }
    }
}

int main()
{
    int i;
    fin >> n >> m;
    for(i=1; i<=n; i++)
    {
        fin >> x >> y >> c;
        aux = new graf;
        aux->nod = x;
        aux->cost = c;
        aux->urm = a[y];
        a[y] = aux;

        aux = new graf;
        aux->nod = y;
        aux->cost = c;
        aux->urm = a[x];
        a[x] = aux;
    }
    dijkstra(1);
    for(i=2; i<=n; i++)
    {
        if( d[i] == pinf )
        {
            fout << 0 << " ";
        }
        else
        fout << d[i] << " ";
    }
    fout << '\n';
    return 0;
}