Cod sursa(job #1361402)

Utilizator BaltaretuAndreiBaltaretu Andrei BaltaretuAndrei Data 25 februarie 2015 21:03:10
Problema Algoritmul lui Dijkstra Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.46 kb
#include <fstream>
#include <vector>
#include <utility>

using namespace std;

ifstream f;
ofstream g;

vector <pair <int , int> > v[50001];

int i,n,m,x,y,c,p,dmin[50001],oo=16000,pre[50001];
bool viz[50001];

int minim()
{
    int mn=oo;
    for(i=1;i<=n;i++)
        if(dmin[i]<mn && viz[i]==false)
        {
            mn=dmin[i];
            p=i;
        }
    return mn;
}

void dijkstra()
{
    int mini,ok=1;
    while(ok)
    {
        mini=minim();
        if(mini<oo)
        {
            viz[p]=true;
            for(i=0;i<v[p].size();i++)
                if(!viz[v[p][i].first] && dmin[v[p][i].first]> dmin[p]+dmin[v[p][i].second])
                {
                    dmin[v[p][i].first]=dmin[p]+v[p][i].second;
                    pre[v[p][i].first]=p;
                }
        }
        else ok=0;
    }
}

int main()
{
    f.open("dijkstra.in");
    f>>n>>m;
    for(i=1;i<=n;i++)
        dmin[i]=oo;
    for(i=1;i<=n;i++)
    {
        f>>x>>y>>c;
        v[x].push_back(make_pair(y,c));
        v[y].push_back(make_pair(x,c));
        if(x==1)
        {
            dmin[y]=c;
            pre[y]=1;
        }
        else if(y==1)
        {
            dmin[x]=c;
            pre[x]=1;
        }
    }
    f.close();
    viz[1]=true;
    dmin[1]=0;
    pre[1]=0;
    dijkstra();
    g.open("dijkstra.out");
    for(i=2;i<=n;i++)
        g<<dmin[i]<<" ";
    g.close();
        return 0;
}