Cod sursa(job #1864972)

Utilizator poppaulpop paul poppaul Data 1 februarie 2017 10:14:26
Problema Ubuntzei Scor 20
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.17 kb
#include <fstream>
#define infinit 54868

using namespace std;

int viz[2000],d[2000],tata[2000],mat[2000][2000],n,m,x,y,z,k,dist,i,minn,ok;

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

void dijkstra(int a)
{
    for(i=1;i<=n;++i)
    {
        d[i]=mat[a][i];
        tata[i]=a;
        viz[i]=0;
    }
    d[a]=0;
    tata[a]=0;
    viz[a]=1;
    ok=1;
    while(ok)
    {
        minn=infinit;
        for(i=1;i<=n;++i)
            if(!viz[i] && minn>d[i])
            {
                minn=d[i];
                k=i;
            }
        if(minn!=infinit)
        {
            viz[k]=1;
            for(i=1;i<=n;++i)
                if(!viz[i] && d[i]>d[k]+mat[k][i])
                {
                    d[i]=d[k]+mat[k][i];
                    tata[i]=k;
                }
        }
        else
            ok=0;
    }
}


int main()
{
    f>>n>>m;
    f>>k;
    for(i=1;i<=k;++i) f>>x;

    for(i=1;i<=n;++i)
        for(int j=1;j<=n;++j)
            mat[i][j]=infinit;

    for(i=1;i<=m;++i)
    {
        f>>x>>y>>dist;
        mat[x][y]=mat[y][x]=dist;
    }

    dijkstra(1);
    g<<d[n];
    return 0;
}