Cod sursa(job #2325190)

Utilizator circeanubogdanCirceanu Bogdan circeanubogdan Data 22 ianuarie 2019 10:54:31
Problema Algoritmul lui Dijkstra Scor 10
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.31 kb
#include <fstream>
#include <vector>
#include <set>
#define DIM 100002
#define INF 1e9

using namespace std;

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

int n, x, y, d, m;
int dist[DIM];

bool inQueue[DIM];

vector<pair<int, int> > graf[DIM];

class compare{
public:
    bool operator() (int a, int b){
        return dist[a] < dist[b];
    }
};

set<int, compare> s;

int main()
{
    in>>n>>m;
    for(int i = 1; i <= m; ++ i){
        in>>x>>y>>d;
        graf[x].push_back({y, d});
        graf[y].push_back({x, d});
    }
    dist[1] = 0;
    for(int i = 2; i <= n; ++ i)
        dist[i] = INF;

    inQueue[1] = true;
    s.insert(1);

    while(!s.empty()){
        int currNode = *s.begin();
        inQueue[currNode] = false;
        s.erase(s.begin());
        for(auto it : graf[currNode]){
            int nextNode = it.first;
            int distance = it.second;
            if(dist[currNode] + distance < dist[nextNode]){
                if(inQueue[nextNode] == true){
                    s.erase(s.find(nextNode));
                }
                dist[nextNode] = dist[currNode] + distance;
                s.insert(nextNode);
            }
        }
    }

    for(int i = 2; i <= n; ++ i)
        out<<dist[i]<<" ";



    return 0;
}