Cod sursa(job #1128494)

Utilizator varga13VarGaz13 varga13 Data 27 februarie 2014 17:20:49
Problema Algoritmul lui Dijkstra Scor 90
Compilator cpp Status done
Runda Arhiva educationala Marime 1.22 kb
#include <fstream>
#include <vector>
#include <queue>
#define mx 50000
using namespace std;

ifstream f("dijkstra.in");
ofstream g("dijkstra.out");
int n,m, sol[mx];
vector< pair<int,int> > G[mx];// first==nod || second == cost
queue<int> Proc;

void Initializ(int S)
{
    for(int i=1;i<=n;i++)
        sol[i]=int(2e11);
    sol[S]=0;

}

void Dijkstra(int S)
{
    int actual;
    Initializ(S);
    for(Proc.push(S);Proc.size();Proc.pop())
    {
        actual=Proc.front();
        for(int i=0;i<G[actual].size();i++)
        {
            if(sol[G[actual][i].first]>sol[actual]+G[actual][i].second)
            {
                sol[G[actual][i].first]=sol[actual]+G[actual][i].second;
                Proc.push(G[actual][i].first);
            }
        }
    }
}

void Read()
{
    int S,D,C;
    f>>n>>m;
    for(int i=0;i<m;++i)
    {
        f>>S>>D>>C;
        G[S].push_back( make_pair(D,C) );
    }
}

void Write(int S)
{
    for(int i=2;i<=n;++i)
    {
        if(sol[i]==int(2e11))
            g<<0<<' ';
        else if(i!=S)
            g<<sol[i]<<' ';
    }
}

int main()
{
    Read();
    Dijkstra(1);
    Write(1);


    f.close();
    g.close();
    return 0;
}