Cod sursa(job #2292724)

Utilizator skoda888Alexandru Robert skoda888 Data 29 noiembrie 2018 21:21:14
Problema Algoritmul lui Dijkstra Scor 20
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.8 kb
#include <iostream>
#include <fstream>
#include <queue>
#include <vector>
#include <climits>

#define INF INT_MAX

int dist[50005];

struct Compare{
    bool operator()(int a, int b){
        return (dist[a] > dist[b]);
    }
};

int main()
{

    std::ifstream in("dijkstra.in");
    std::ofstream out("dijkstra.out");


        int N, M, sursa;
        in >> N >> M;
        sursa = 1;


        bool viz[50005] = {};
        for(int i = 0; i <= N; ++i){
            dist[i] = INF;
        }
        dist[sursa] = 0;
        std::vector< std::pair<int, int> > Graf[N + 1];
        for(int i = 1; i <= M; ++i){
            int x, y, cost;
            in >> x >> y >> cost;
            Graf[x].push_back(std::make_pair(y, cost));
            Graf[y].push_back(std::make_pair(x, cost));
        }
        //std::cout << '*';
        std::priority_queue<int, std::vector<int>, Compare> Coada;
        Coada.push(sursa);
        viz[sursa] = true;

        while(!Coada.empty()){
            int nod_curent = Coada.top();
            Coada.pop();
            viz[sursa] = false;

            for(int i = 0; i < Graf[nod_curent].size(); ++i){
                int Capat = Graf[nod_curent][i].first;
                int Cost = Graf[nod_curent][i].second;

                if(dist[nod_curent] + Cost < dist[Capat]){
                    dist[Capat] = dist[nod_curent] + Cost;
                    if(!viz[Capat]){
                        Coada.push(Capat);
                        viz[Capat] = true;
                    }
                }
            }
        }
        for(int i = 2; i <= N; ++i){
            if(dist[i] == INF){
                out << 0 << ' ';
            }
            else{
                out << dist[i] << ' ';
            }
        }



    return 0;
}