Cod sursa(job #1857516)

Utilizator alexnigaNiga Alexandru alexniga Data 26 ianuarie 2017 12:23:57
Problema Ubuntzei Scor 15
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.36 kb
#include <iostream>
#include <fstream>
using namespace std;
ifstream f("ubuntzei.in");
ofstream g("ubuntzei.out");
#define Infinit 10000
int n, m, i, k, j, a[10000][10000], viz[100], t[100], d[100], k1, l, o, u, dis, x[2001];
void dijkstra(int start)
{
    int i, ok, min, k;
    viz[start]=1;
    for(i=1;i<=n;i++)
    {
        d[i]=a[start][i];
        if(a[start][i]&&a[start][i]!=Infinit)
            t[i]=start;
    }
    viz[start]=1;
    ok=1;
    while(ok)
    {
        min=Infinit;
        for(i=1;i<=n;i++)
            if(d[i]<min&&viz[i]==0)
                {
                    min=d[i];
                    k=i;
                }
        if(min!=Infinit)
        {
            viz[k]=1;
            for(i=1;i<=n;i++)
                if(d[i]>d[k]+a[k][i])
                {
                    d[i]=d[k]+a[k][i];
                    t[i]=k;
                }
        }
    else
    ok=0;
}
}
void drum(int h)
{
    if(h!=0)
        {
            drum(t[h]);
            g<<h<<" ";
        }
}
int main()
{
    f>>n>>m;
    f>>k;

    for(i=1;i<=k;i++)
        f>>x[i];
    for(i=1;i<=n;i++)
        for(j=1;j<=n;j++)
            if(i!=j)
                a[i][j]=Infinit;
    for(i=1; i<=m; i++)
    {
        f>>u>>o>>dis;
        a[u][o]=a[o][u]=dis;
    }
    dijkstra(1);
    g<<d[n];
    return 0;
}