Cod sursa(job #2170340)

Utilizator LuizaPatroescuPatroescu Luiza LuizaPatroescu Data 14 martie 2018 23:36:05
Problema Algoritmul lui Dijkstra Scor 10
Compilator cpp Status done
Runda Arhiva educationala Marime 1.3 kb
#include <iostream>
#include <fstream>
#define Inf 999999

using namespace std;

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

int n, x, y, cst, x0, p,vfmin, dmin, d[102], c[102][102], pre[102], m[102];

void initializare()
{
    f >> n >> p;

    for ( int i=1; i<=n; i++ )
        for ( int j=i+1; j<=n; j++ )
            c[i][j] = c[j][i] = Inf;

    while ( !f.eof() )
    {
        f >> x >> y >> cst;
        c[x][y] = cst;
    }

    for ( int i=1; i<=n; i++ )
    {
        d[i] = c[1][i];
        pre[i] = 1;
    }

    m[1] = 1;
    pre[1] = 0;
}

void rezolvare()
{
    for ( int j=1; j<n; j++ )
    {
        dmin = Inf;
        for ( int i=1; i<=n; i++ )
        {
            if ( m[i] == 0 && d[i] < dmin )
            {
                dmin = d[i];
                vfmin = i;
            }
        }

        m[vfmin] = 1;

        for ( int i=1; i<=n; i++ )
            if ( m[i] == 0 && d[i] > d[vfmin] + c[vfmin][i] )
            {
                d[i] = d[vfmin] + c[vfmin][i];
                pre[i] = vfmin;
            }
    }
}

void afisare()
{
    for ( int i=2; i<=n; i++ )
        if ( d[i] != Inf )
            g << d[i] << " ";
    else g << "-1 ";
}

int main()
{
    initializare();
    rezolvare();
    afisare();
}