Cod sursa(job #1003942)

Utilizator raulmuresanRaul Muresan raulmuresan Data 1 octombrie 2013 19:53:51
Problema Algoritmul lui Dijkstra Scor 10
Compilator cpp Status done
Runda Arhiva educationala Marime 1.42 kb
#include <cstdio>
#include <algorithm>
#include<vector>

using namespace std;

int minim,i,aux,n,k,j,p,s,unu,t,m,doi,x,q,st,dr,maxi,sol,maxi2,viz[50010],y,conex,cost,d[50010],ok;
vector < pair<int, int> > v[50010];




int main()
{
    freopen ("dijkstra.in","r",stdin);
    freopen ("dijkstra.out","w",stdout);
    scanf("%d%d",&n,&m);
    for(i=1;i<=m;i++)
    {
        scanf("%d %d %d",&x,&y,&cost);
       // printf("%d %d %d\n",x,y,cost);
        v[x].push_back(make_pair(y,cost));
    }

    for(i=2;i<=n;i++)
    {
        d[i]=1000000000;
    }
    for(i=0;i<v[1].size();i++)
    {
        //printf("%d\n",v[1][i].first);
        d[v[1][i].first]=v[1][i].second;
    }
    ok=0;
    viz[1]=1;
    while(ok==0)
    {
        minim=1000000000;
        for(i=2;i<=n;i++)
        {
            if(viz[i]==0 && minim>d[i])
            {
                minim=d[i];
                k=i;
            }
        }
        if(minim!=1000000000)
        {
            viz[k]=1;
            //printf("%d\n",k);
            for(j=0;j<v[k].size();j++)
            {
               // printf("%d ",d[v[k][j].first]);
                if(d[v[k][j].first] > minim+v[k][j].second)
                {
                    d[v[k][j].first] = minim+v[k][j].second;
                }
            }

        }
        else ok=1;

    }
    for(i=2;i<=n;i++)
    {
        printf("%d ",d[i]);
    }


}