Cod sursa(job #1601053)

Utilizator gerd13David Gergely gerd13 Data 15 februarie 2016 18:12:59
Problema Algoritmul lui Dijkstra Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.12 kb
#include <fstream>
#include <algorithm>
#include <vector>
#include <cstring>
#include <queue>

const int NMAX = 250005 ;
const int INF = 0x3f3f3f3f ;

using namespace std ;

ifstream fin("dijkstra.in") ;
ofstream fout("dijkstra.out") ;

vector <pair <int, int> > V[NMAX] ;
int D[NMAX], N, M;
queue <int> Q;

inline void Dijkstra(int start)
{
    Q.push(start) ;
    D[start] = 0 ;
    while(!Q.empty())
    {
        int act = Q.front() ;
        Q.pop() ;
        for(vector <pair <int, int> > ::iterator it = V[act].begin() ; it != V[act].end() ; ++ it)
        {
            if(D[it -> first] > D[act] + it -> second)
                D[it -> first] =  D[act] + it -> second;
                Q.push(it -> first) ;
            }

    }

}



int main()
{

    fin >> N >> M ;

    for(int i = 1 ; i <= M ; ++ i)
    {
        int x, y, cost ;
        fin >> x >> y >> cost ;
        V[x].push_back(make_pair(y, cost)) ;
    }

    memset(D, INF, sizeof D) ;

    Dijkstra(1) ;

    for(int i = 2 ; i <= N ; ++ i)
        fout << D[i] << ' ' ;

    fin.close() ;
    fout.close();
}