Cod sursa(job #1913052)

Utilizator BovisioNitica Ionut Bogdan Bovisio Data 8 martie 2017 11:38:41
Problema Ubuntzei Scor 20
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.44 kb
#include <cstdio>

#define inf 10000000

using namespace std;

int m,n,c[500][500],v[500],d[500];
int Opt1,Opt2;

void Read()
{
    int aux1,aux2,cost;
    freopen("ubuntzei.in","r",stdin);
    scanf("%i %i %i",&n,&m,&Opt1);
    for(int i=1;i<=n;i++)
    {
        for(int j=1;j<=n;j++)
        {
            if(i == j)
                c[i][j] = 0;
            else
                c[i][j] = inf;
        }
    }
    for(int i=1;i<=m;i++)
    {
        scanf("%i %i %i",&aux1,&aux2,&cost);
        c[aux1][aux2] = c[aux2][aux1] = cost;
    }
}

void Pasul1(int x)
{
    for(int i=1;i<=n;i++)
    {
        d[i] = c[x][i];

        if(i == x)
            v[i] = 1;
        else
            v[i] = 0;
    }
}

int minim()
{
    int loc = 0;
    int min = inf;
    for(int i=1;i<=n;i++)
    {
        if(v[i] == 0 && d[i] != inf)
        {
            if(d[i] < min)
            {
                min = d[i];
                loc = i;
            }
        }
    }
    return loc;
}

void Pasul2()
{
    int loc;
    for(int i=2;i<=n-1;i++)
    {
        loc = minim();
        v[loc] = 1;
        for(int j=1;j<=n;j++)
        {
            if(d[j] > d[loc] + c[loc][j])
            {
                d[j] = d[loc] + c[loc][j];
            }
        }
    }
}

int main()
{
    Read();
    Pasul1(1);
    Pasul2();
    freopen("ubuntzei.out","w",stdout);
    printf("%i",d[n]);
    return 0;
}