Cod sursa(job #317430)

Utilizator RegeleUmbrelorPopescu Mihai RegeleUmbrelor Data 23 mai 2009 16:35:55
Problema Algoritmul lui Dijkstra Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.06 kb
using namespace std;
#include<stdio.h>
#include<vector>
const int lmax=250000005;
int d[50005],n,m;
vector<int> a[50005];
vector<int> p[50005];
bool sel[50005];

void citire()
{
    int i,x,y,c;
    freopen("dijkstra.in", "r", stdin);
    freopen("dijkstra.out", "w", stdout);
    scanf("%d%d\n", &n, &m);
    for(i=1;i<=n;++i)
    {
            d[i]=lmax;
            sel[i]=false;
    }
    d[1]=0;
    for(i=1;i<=m;++i)
    {
        scanf("%d%d%d\n", &x,&y,&c);
        a[x].push_back(y);
        p[x].push_back(c);
    }
}

int minim()
{
    int min=lmax,pmin=lmax,i;
    for(i=1;i<=n;++i)
        if(!sel[i] && d[i]<min)
        {
            min=d[i];
            pmin=i;
        }
    return pmin;
}

void update(int x)
{
    for(int i=0;i<a[x].size();++i)
        if(d[x]+p[x][i]<d[a[x][i]])
            d[a[x][i]]=d[x]+p[x][i];
}

void calcul()
{
    int x;
    for(int i=1;i<n;++i)
    {
        x=minim();
        update(x);
    }
}

void af()
{

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



int main()
{
    citire();
    calcul();
    af();
    return 0;
}