Cod sursa(job #989862)

Utilizator alex_HarryBabalau Alexandru alex_Harry Data 26 august 2013 17:19:04
Problema Algoritmul lui Dijkstra Scor 40
Compilator cpp Status done
Runda Arhiva educationala Marime 1.16 kb
#include <fstream>
#include <vector>
#define INF 1<<30
using namespace std;
ifstream f("dijkstra.in");
ofstream g("dijkstra.out");
vector <pair<int,int> > G[50002];
int N,M,D[50002];
bool Use[50002];
void Read()
{
    int i;
    f>>N>>M;
    for(i=1;i<=M;i++)
    {
        int x,y,cost;
        f>>x>>y>>cost;
        G[x].push_back(make_pair(y,cost));
    }
    for(i=2;i<=N;i++)
        D[i]=INF;
}
int count_min()
{
    int min=INF,i,pozition;
    for(i=1;i<=N;i++)
        if(min>D[i] && Use[i]==0)
        {
            min=D[i];
            pozition=i;
        }
    return pozition;
}
void Solve()
{
    int i,counter=0;
    while(counter<N)
    {
        int pozition=count_min();
        Use[pozition]=1;
        counter++;
        for(i=0;i<G[pozition].size();i++)
        {
            int vecin=G[pozition][i].first,cost=G[pozition][i].second;
            if(D[pozition]+cost<D[vecin])
                D[vecin]=D[pozition]+cost;
        }
    }
    for(i=2;i<=N;i++)
    {
        if(D[i]==INF)
            D[i]=0;
        g<<D[i]<<" ";
    }
    g<<"\n";
}
int main()
{
    Read();
    Solve();
    return 0;
}